web-dev-qa-db-ja.com

pg_basebackup:サーバーに接続できませんでした:fe_sendauth:パスワードが提供されていません

2つのPostgresサーバー間でストリーミングレプリケーションを設定しようとしています。マスターサーバーのpg_hba.confファイルは次のように構成されています。

Host    replication     ${REP_USER}     0.0.0.0/0               md5
Host    ${DB_NAME}      ${DB_USER}      0.0.0.0/0               md5

そして、スレーブコンテナー内の初期化子スクリプトは、起動時に次のスクリプトを実行してそれに接続します。

cat > ~/.pgpass <<EOS
${MASTER_PORT_5432_TCP_ADDR}:5432:${REP_USER}:${REP_PASS}
EOS
chmod 0600 ~/.pgpass

echo "Cleaning up old cluster directory"
rm -rf ${PGDATA}/*

echo "Starting base backup as replicator"
pg_basebackup -h ${MASTER_PORT_5432_TCP_ADDR} -D ${PGDATA} -U ${REP_USER} -vPw

すべてのenv値が設定されます。問題は私がこのエラーを受け取り続けることです:

pg_basebackup: could not connect to server: fe_sendauth: no password supplied

なぜこれが起こり続けるのかわかりません。適切な権限を持つパスワードファイルを用意しました。また、リカバリファイルにはパスワードがあり、pg_basebackupが常に失敗するため、作成されません。

何か助けていただければ幸いです...

1
picardo

あなたの問題は、あなたの .pgpass file にデータベースフィールドが欠落しており、すべてのフィールドが必須であるということです(ただし、一致する場合は*を使用できます)。 pg_basebackup(レプリケーションプロトコルを使用)を使用しているため、「レプリケーション」として指定する必要があります。

cat > ~/.pgpass <<EOS
${MASTER_PORT_5432_TCP_ADDR}:5432:replication:${REP_USER}:${REP_PASS}
EOS
...

データベースフィールドに*を使用することもできますが、replicationの方が厳密です。

3
MatheusOl