2014-09-24 85 views
0

在Postgres的recovery.conf文件中设置trigger_file名字的时候,当我使用设定的Postgres的trigger_file的

trigger_file = '$PGDATA/failover_file' 

,然后touch $PGDATA/failover_file,故障转移工作不

但路径名,当我使用的

trigger_file = '/opt/rh/postgresql92/root/var/lib/pgsql/data/failover_file' 

然后touch $PGDATA/failover_file全路径名,故障转移工程确定

有没有人知道在trigger_file中使用环境变量会使故障转移无法工作?

感谢 戴夫

+0

我不认为在'postgresql.conf'或'recovery.conf'设置中扩展了环境变量。是什么让你觉得他们会是?如果有文件说明需要修复,请显示链接。 – 2014-09-24 11:36:37

+0

我已将recovery.conf文件中的$ PGDATA变量用作restore_command设置的一部分。它安静地愉快地扩展那里的变量,但不在trigger_file中。我没有阅读过任何地方,它说它或不扩展这些文件中的变量,但我认为这是一致的。 – davegreen100 2014-09-24 12:48:26

+0

这是因为'recovery_command'是一个shell命令,所以你可以在那里使用'$ variable'这样的shell元字符。对于PostgreSQL来说,它只是一个文本字符串,但是当PostgreSQL运行该命令时,shell会解释它,并且它会看到由PostgreSQL设置的'PGDATA' env var。 – 2014-09-24 14:27:11

回答

2

一般情况下,环境变量没有分析或recovery.conf以任何方式认可。

restore_command是因为Postgres的与C system()功能,通过man 3 system描述执行它的特殊情况:

system() executes a command specified in command by calling /bin/sh -c 
    command, and returns after the command has been completed. 

所以实际上它是一个外壳,其restore_command传递它扩展环境变量,而不是Postgres的。

另一方面,在trigger_file中没有涉及shell,因此不会发生可变扩展。