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
が常に失敗するため、作成されません。
何か助けていただければ幸いです...
あなたの問題は、あなたの .pgpass
file にデータベースフィールドが欠落しており、すべてのフィールドが必須であるということです(ただし、一致する場合は*
を使用できます)。 pg_basebackup
(レプリケーションプロトコルを使用)を使用しているため、「レプリケーション」として指定する必要があります。
cat > ~/.pgpass <<EOS
${MASTER_PORT_5432_TCP_ADDR}:5432:replication:${REP_USER}:${REP_PASS}
EOS
...
データベースフィールドに*
を使用することもできますが、replication
の方が厳密です。