2

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

根据我从调试中确定的结果,当database/sql重新连接时(没有网络是完美的),应用程序开始失败,因为没有设置搜索路径。有没有办法指定重新连接时应该执行的命令?我已经搜索了一个可以利用的事件,但到目前为止还没有找到。

谢谢!

4

1 回答 1

4

来自精美手册

连接字符串参数
[...]
除了上面列出的参数外,任何可以在后端启动时设置的运行时参数都可以在连接字符串中设置。有关详细信息,请参阅http://www.postgresql.org/docs/current/static/runtime-config.html

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

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

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

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

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

于 2018-02-09T02:13:24.783 回答