Win 2012サーバーにpostgreSQL 9.4.1がインストールされています。
このサーバーと同じ仕様の別のサーバーとの間のレプリケーションをセットアップしようとしています。 ウォームスタンバイセクション25.2. に従ってスタンバイサーバー用のマスターデータベースサーバーを準備するためのガイダンスに従っています pg_basebackup を使用する必要があります。
マスターのPostgreSQLインスタンスには、アプリの1つのデータベースが含まれています。このデータベースには3つのスキーマがあり、それぞれに専用のテーブルスペースがあります。 Windowsでは、テーブルスペースの場所はMKLINKコマンドを使用して作成されました(LOCATIONパラメーターはWindowsのシンボリックリンクを指す必要があると思います)。
mklink /j C:\tbs1 D:\app\tablespace\tbs1
mklink /j C:\tbs2 D:\app\tablespace\tbs2
したがって、上記を例として使用して、postgreSQLのテーブルスペースが次のコマンドを使用して作成されました。
CREATE TABLESPACE app_ops OWNER the_user LOCATION 'C:\tbs1';
それで結構です。しかし、pg_basebackupツールを使用したい場合、次のエラー/警告が表示されました-バックアップの場所に何も書き込まれていません。
pg_basebackup -h localhost -U postgres -D C:\master_backup
pg_basebackup: directory "C:\tbs1" exists but is not empty
なぜこのメッセージが表示されるのかわかりません。
私が見た多くの回答の要点は、テーブルスペースがPG_DATA内に存在しないことを保証することについて話しています。しかし、私の場合はそうではありません-PG_DATAは、Windowsサービスの実行可能パスに-DC:\ Program Files\PostgreSQL\9.4\dataとして設定されています。 :
"C:\Program Files\PostgreSQL\9.4\bin\pg_ctl.exe" runservice -N "postgresql-x64-9.4" -D "C:\Program Files\PostgreSQL\9.4\data" -w
テーブルスペースマッピングパラメーター 'old = new'を確認しましたが、結果は変わりませんでした。
同様の質問とガイダンスがあることを感謝しますが、役立つ追加情報を見つけることができないようです。私はdba/stackoverflowとwww.postgresql.orgを見てきました。役立つ情報を見た場所をもっとリストアップします-残念ながら、私の評判ではこれ以上追加できません
何かご意見やご感想がございましたら、よろしくお願いいたします。
よろしく。
私の意見では、それはmklink
やWindowsの問題とは関係ありません。
pg_basebackup docs 、ごとに、メインデータディレクトリはターゲットディレクトリに配置されますが、他のすべてのテーブルスペースは、サーバー上と同じ絶対パスに配置されます。
-F format
--format=format
Selects the format for the output. format can be one of the following:
p
plain
Write the output as plain files, with the same layout as the current data directory and tablespaces. When the cluster has no
additional tablespaces, the whole database will be placed in the
target directory. If the cluster contains additional tablespaces, the
main data directory will be placed in the target directory, but all
other tablespaces will be placed in the same absolute path as they
have on the server.
This is the default format.
解決策:同じサーバーで実行しないか、バックアップ形式を変更してください。