我有一个用 Go 编写的小应用程序,它连接到 PostgreSQL另一台服务器上的数据库,利用database/sql
和lib/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/