postgresql - Go database/sql - 重新连接时发出命令

标签 postgresql go pq

我有一个用 Go 编写的小应用程序,它连接到 PostgreSQL另一台服务器上的数据库,利用database/sqllib/pq。当我启动应用程序时,它会检查并确定所有数据库表和索引都存在。作为此过程的一部分,它会发出 SET search_path TO Preferredschema,public 命令。然后,对于其余的数据库访问,我不必指定架构。

根据我通过调试确定的情况,当 database/sql 重新连接时(没有网络是完美的),应用程序开始失败,因为搜索路径不正确放。有没有办法指定重新连接时应执行的命令?我已经搜索了一个可能可以利用的事件,但到目前为止一无所获。

谢谢!

最佳答案

来自fine manual :

Connection String Parameters
[...]
In addition to the parameters listed above, any run-time parameter that can be set at backend start time can be set in the connection string. For more information, see http://www.postgresql.org/docs/current/static/runtime-config.html.

然后,如果我们转到 PostgreSQL documentation ,您将看到设置连接参数的各种方法,例如配置文件、SET 命令、命令行开关,...

虽然没有明确说明所需的行为,但建议您可以将 SET 中的任何内容直接放入连接字符串中:

connStr := "dbname=... user=... search_path=preferredschema,public"
// -----------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

由于这就是配置连接的全部内容,因此它应该用于每个连接(包括重新连接)。

pq 文档的连接字符串参数部分还告诉您如何引用和转义事物,如果preferredschema确实需要它或者如果您必须获取一个值在运行时并将其添加到连接字符串中。

关于postgresql - Go database/sql - 重新连接时发出命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48696921/

相关文章:

PHP 从 postgresql 数据库构建特定的 JSON 字符串

python - 使用 icontains 的 Django SearchVector

string - 如何在 GO 中操作字符串来反转它们?

sql - Postgres 无法确定 Golang 应用程序中参数 $1 的数据类型

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

postgresql - 转换参数 $1 类型 : unsupported type []interface {}, 的一个接口(interface)

postgresql - 如何退出/注销 PostgreSQL?

golang - 如何从 interface{} 类型的 slice 中获取元素?

go - 这个选择在 goroutine 中如何工作?

sql - 按所选值将记录分组到不同的列中