PostgreSQL的.pgpass
文件可以放在多个位置,具体如下:
-
用户主目录下的
.pgpass
文件(例如:~/.pgpass
),只对当前用户生效。 -
通过设置环境变量
PGPASSFILE
,可以将.pgpass
文件放在其他位置,例如:export PGPASSFILE=/path/to/.pgpass
此时
.pgpass
文件将被读取,而忽略用户主目录下的.pgpass
文件。注意:这种方式只在当前shell会话中生效,如果要永久生效,需要将其添加到bash配置文件(例如
~/.bashrc
)或者其他启动文件中。 -
如果使用libpq库编写的程序,可以使用
PQExpBuffer
函数动态构造一个.pgpass
文件的内容,并将其作为参数传递给PQconnectdbParams
函数。例如:PQExpBuffer connOptions = PQExpBufferCreate(); PQExpBufferAppend(connOptions, "host=localhost port=5432 dbname=mydb"); PQExpBufferAppend(connOptions, "user=myuser password=mypassword"); const char* pgpassContents = PQExpBufferContents(connOptions); conn = PQconnectdbParams(conninfo, NULL, 0);
这样,程序可以动态设置连接选项,而无需使用
.pgpass
文件。
注意,.pgpass
文件的权限必须设置为只允许所有者读取和写入,即0600
权限。如果.pgpass
文件的权限不正确,PostgreSQL将会忽略它。