Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql postgres pg#U basebackup can';找不到.pg_pass文件_Postgresql_Amazon Web Services_Docker_Amazon Ec2 - Fatal编程技术网

Postgresql postgres pg#U basebackup can';找不到.pg_pass文件

Postgresql postgres pg#U basebackup can';找不到.pg_pass文件,postgresql,amazon-web-services,docker,amazon-ec2,Postgresql,Amazon Web Services,Docker,Amazon Ec2,我已成功设置了从主postgres docker容器到辅助postgres docker容器的复制流,每个容器在单独的ec2实例上作为任务运行。 但是,我通过将主服务器上的复制用户作为信任保留在其pg_hba.conf中来做到这一点: 主机复制复制0.0.0.0/0信任 然后,当我将它切换到md5时,我想我可以简单地为复制用户在辅助服务器上设置密码,一切都会很好。没有 在辅助服务器上的初始化脚本中,当我调用 pg#U basebackup-h#{primary_ip}-p5432-D$PG

我已成功设置了从主postgres docker容器到辅助postgres docker容器的复制流,每个容器在单独的ec2实例上作为任务运行。
但是,我通过将主服务器上的复制用户作为信任保留在其pg_hba.conf中来做到这一点:

主机复制复制0.0.0.0/0信任

然后,当我将它切换到md5时,我想我可以简单地为复制用户在辅助服务器上设置密码,一切都会很好。没有

在辅助服务器上的初始化脚本中,当我调用

pg#U basebackup-h#{primary_ip}-p5432-D$PGDATA-U#{repl_user}-v-p-w--xlog method=stream
我最初收到密码提示。
然后我添加了
-w
。这会给我一个错误:

pg_basebackup:无法连接到服务器:fe_sendauth:未提供密码

然后我发现在通用的postgres 9.6映像上没有postgres主目录,所以我添加了一个$PG_PASSFILE变量。这不起作用(权限很好,我甚至将它放在/tmp中,并将PG_PASSFILE=…传递到PG_basebackup行上,如本问题所示:(参见Raphael的评论))
无论我做什么,pg_basebackup都会忽略.pg_pass文件

然后我尝试将一个卷装载为/home/postgres,但是使用AWS,我似乎无法在我创建的入口点init脚本中找到根。一切都以postgres用户的身份进行

有人克服了这个问题吗?

我正在以入口点脚本的形式运行辅助初始化代码。正如我所说,它可以作为信任运行,但添加密码会让我很痛苦。

如果设置复制,则不再需要运行
pg\u basebackup
。添加
-w
将始终为您提供
fe_sendauth:no password supplied
如果您为本地到相应连接设置了
信任
对等
,这只是因为
-w
代表
——no password

PGPASSFILE指定用于查找的密码文件的名称。 如果未设置,则默认为~/.pgpass(参见第32.15节)

所以默认值是
.pgpass
,而不是
.pg\u pass
,当然您可以使用
.pg\u pass
,设置
导出PGPASSFILE=.pg\u pass
,但您可以使用
pg\u PASSFILE
变量-right

因此,postgres忽略了这一点,它应该这样做

我将首先尝试使用
600
权限在主目录中创建right
.pgpass

如果要使用密码文件,还请注意不同的
主\u conninfo

在备用服务器上的单独~/.pgpass文件中(将复制用作 数据库名称)。不要在中指定数据库名称 主连接信息字符串


谢谢你的回复。因为我是在脚本中运行的,所以我需要-w,以便它不会试图提示我。然后查找.pgpass文件。在AWSEC2实例上,postgres没有主目录,我无法创建主目录,因为脚本中没有sudo。即使我在命令行上设置PG_PASSFILE env var,它也不会使用它。我相信这与AWS/EC2/Docker环境有关。而且,如果没有pg_basebackup,我也不知道该怎么做。我将对此进行研究。我最终稍微改变了我的策略:我从postgres创建了自己的docker映像,创建了主目录,并自己设置了权限。然后,在postgres entrypoint init脚本中,我只是将.pgpass文件的值回显到其中。现在很好用。