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

Go database/sql - Issue Commands on Reconnect

我有一个用 Go 编写的小应用程序,它使用 database/sqllib/pq 连接到另一台服务器上的 PostgreSQL 数据库。当我启动应用程序时,它会检查并确定所有数据库表和索引都存在。作为此过程的一部分,它会发出 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 确实需要它或者您必须抓住运行时的一个值并将其添加到连接字符串。