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

时间:2018-02-09 00:26:45

标签: postgresql go pq

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

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

谢谢!

1 个答案:

答案 0 :(得分:3)

来自fine manual

  

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

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

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

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

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

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