问题标签 [pq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
204 浏览

go - lib/pq:查询数据库时出现运行时错误

我正在为我的 Go 后端设置 PostgreSQL 数据库,但在尝试读取表时出现此错误:

这是错误指向(main.go:63)的地方:

employees它应该返回我在表上手动创建的两行。注意我已成功连接到数据库,只是查询时出错。

去版本:go version go1.12.7 linux/amd64

有人能帮忙吗?

0 投票
1 回答
280 浏览

postgresql - 如何获取 unique_constraint 违规的列名?

我正在使用 pq 驱动程序,我想知道为什么当我面临唯一约束违规时 pq.Error 会给出一个空列。

我可以解析Detail,但有什么理由为什么Column会是空的?如果我能从中获取emailColumn不是解析会更好Detail

这是错误的样子:

不幸的是,该Column值为空。我正在尝试为我的应用程序提供错误消息,我想知道是否有某种方法可以获取该信息,以便我可以增强未创建实体的消息并让调用者知道该字段(email在这种情况下) 也是如此。

0 投票
0 回答
1238 浏览

sql - sql:预期 0 个参数,得到 2 个

我正在努力正确利用Postgressqlxpq驱动程序来在数据库中创建一行。让我们从简单的开始:

我有一个user,roleuser_role表。我想在数据库中插入一个角色并获取插入行的 ID。使用以下 sql 可以完美地工作:

const createRoleSQL = "INSERT INTO role (name) VALUES (:name) RETURNING id"

为了使这项工作顺利进行,我在某个时候准备了声明:

创建时,我将查询作为事务的一部分运行txrole显然是具有正确字段和db标签的结构:

这工作得很好。

现在我想扩展它并插入一个新角色并将其分配给用户:

不幸的是,这失败了sql: expected 0 arguments, got 2。是否可以通过单个查询来实现我想要做的事情?

0 投票
1 回答
59 浏览

postgresql - 不能从 db.QueryRow() 推断出错误

我正在尝试实现一个简单的 POST API 来在 Postgres DB 上插入数据,如下所示:

http://123.123.10.10/checkin?userid=clive&token=1234jhhasdbn

Go 编译器(我正在使用 v1.13)抱怨:

.\checkin.go:63:2:未定义:错误

.\checkin.go:65:6: undefined: err

如何解决这个问题?

0 投票
1 回答
6273 浏览

postgresql - 转换参数 $1 类型:不支持的类型 []interface {},接口切片

我尝试查询用户 ID 列表。我正在使用 Go Pq库。

当我运行它时,它给出了错误转换参数 $1 type: unsupported type []interface {}, a slice of interface

0 投票
1 回答
316 浏览

cockroachdb - pq.NewListener/Listen 带有 pq 的块:在“listen”处或附近出现语法错误

我在 cockroachdb (postgres db) 中有带有 lambda 通知的 minio/s3 对象存储。我正在尝试使用以下 golang 代码监视这些事件。

当我运行这个程序时,我看到以下错误并且卡住了。

手动连接到 cockroachdb 可以正常工作。

任何想法为什么会出错pq: syntax error at or near "listen"。我也在查看 pq 来源,该错误很可能与notify.go#L756有关

0 投票
1 回答
1235 浏览

database - 在 for 循环中使用 db 连接时内存泄漏

我正在尝试在无限 for 循环中连续查询 Postgres 数据库。但是,查询似乎没有关闭,垃圾收集器可能无法正常工作,并且我面临内存分配问题。

脚本设计如下:

func main()我声明一个全局数据库连接。然后执行func checkCross(...)which 包含 for 循环,每次迭代执行func importPrices(...)which 依次从数据库中导入行。

函数 checkCross(...)

函数导入价格(...)

输出

您能否指导我的代码或方法中的问题在哪里?我读过一些文章,他们建议rows.Close()在 for 循环中使用而不是,defer rows.Close()但这个解决方案不起作用。

0 投票
2 回答
1837 浏览

go - Go 例程后关闭冗余 sql.Rows 对象的推荐方法

我正在使用 Go 例程将查询并行发送到 PostgreSQL 主节点和从节点。返回有效结果的第一个主机获胜。错误案例不在此问题的范围内。

调用者是唯一关心*sql.Rows对象内容的人,所以我的函数故意不对这些内容进行任何操作。我使用缓冲通道从 Go 例程中检索返回对象,因此应该没有 Go 例程泄漏。垃圾收集应该照顾其余的。

有一个问题我没有正确解决:留在通道中的 Rows 对象永远不会关闭。当我从(只读)事务中调用此函数时,tx.Rollback()为每个非关闭Rows对象实例返回一个错误:"unexpected command tag SELECT".

从更高级别的对象调用此函数:

执行器可以是*sql.DB*sql.Tx或者任何符合接口的东西:

回滚逻辑:

MultiTx是多个节点上开放交易的集合。它是一个更高级别的对象,它调用multiQuery

“清理”未使用的行的最佳方法是什么?我正在考虑不做的选项:

  1. cancel()取消上下文:我相信它会不一致地工作,在调用时可能已经返回了多个查询
  2. 创建一个延迟的 Go 例程,该例程继续耗尽通道并关闭行对象:如果 DB 节点响应缓慢,Rollback()仍会在之前调用rows.Close()
  3. 在 MultiTx 类型中的某处使用 a sync.WaitGroup,可能与 (2) 结合使用:如果其中一个节点无响应,这可能会导致 Rollback 挂起。另外,我不确定我将如何实现它。
  4. 忽略回滚错误:忽略错误听起来从来都不是一个好主意,它们的存在是有原因的。

解决此问题的推荐方法是什么?

编辑:

正如@Peter 所建议的那样,我尝试取消上下文,但这似乎也使查询中返回的所有行无效。在rows.Scancontext canceled在更高级别的调用者处遇到错误。

这是我到目前为止所做的:

编辑2:

@Adrian 提到:

我们看不到实际使用这些的代码。

此代码由类型方法重用。首先是交易类型。这个问题的问题出现在上面的Rollback()方法上。

然后是:

这些方法是函数周围的公共包装器multiQuery()。现在我意识到只是将其发送*Rows到缓冲通道中死,实际上是内存泄漏。在交易案例中,它变得很清楚,因为Rollback()开始抱怨。但是在非事务变体中,通道内部永远不会被垃圾收集,因为驱动程序可能会在调用*Rows之前持有对它的引用。rows.Close()

我已经编写了这个包,供 ORM sqlboiler使用。我的更高级别的逻辑将一个MultiTX对象传递给 ORM。从那时起,我对返回的Rows. 一种简单的方法是我的更高级别的代码取消了之前的上下文Rollback(),但我不喜欢这样:

  1. 它提供了一个非直观的 API。这种(惯用的)方法会破坏:
  1. ORM 的接口还指定了常规的、非上下文感知的Query()变体,在我的包的情况下,它将针对context.Background().

我开始担心这会被设计破坏...无论如何,我将首先实现一个 Go 例程,该例程将耗尽通道并关闭*Rows. 之后我会看看我是否可以实现一些不会影响返回的合理等待/取消机制*Rows

0 投票
1 回答
119 浏览

go - pq QueryRow 扫描失败,内存地址无效或指针取消引用

我有以下函数应该从我的想法表中检索一行:

当我在测试中运行它时,会出现以下错误:

我似乎无法弄清楚问题所在。我相信我已经将 idea var 正确地实例化为指针,然后我在 Scan 方法中为其赋值。有没有人有什么建议?

0 投票
1 回答
490 浏览

postgresql - Postgres 返回 []uint8 而不是 []integer

我将整数数组保存到 PostgreSQL 表中,当尝试检索它时,我总是得到 []uint8 而不是 []int。我尝试使用 []integer、[]bigint、[]smallint。没有任何效果。该数组最多表示四个项目,每个项目在 1-100 之间,没有浮点数。

我正在使用 Go,并且我有一个 []int 对象,这是字段:

我正在尝试修复它,但找不到让 PostgreSQL 返回 []int 的方法。

所有其他表字段都工作得很好。该Quantity字段的类型integer[]

这是插入查询:

这就是我尝试获取数据的方式。

问题仅在于数量。如果我改变我temp object[]uint8而不是[]int我得到字节。