同じサーバーにデータベース (スキーマのみ) を複製する必要があります。pg_dump からの入力を使用して、それを pg_restore にパイプしたいと思います。これは psql で実行できることはわかっていますが、psql には「-c clean」オプションがありません。
これは可能ですが、 pg_restore で可能ですか?
pg_dump --schema public dbName | psql dbNameTest
同じサーバーにデータベース (スキーマのみ) を複製する必要があります。pg_dump からの入力を使用して、それを pg_restore にパイプしたいと思います。これは psql で実行できることはわかっていますが、psql には「-c clean」オプションがありません。
これは可能ですが、 pg_restore で可能ですか?
pg_dump --schema public dbName | psql dbNameTest
次のようになります。
pg_dump --schema-only --format c dbName | \
pg_restore --schema-only --clean --dbname=dbNameTest
ただし、dbNameTest
まだ存在しない場合は機能しません。dbNameTest
以下はその仕事をします(ただし、すでに存在する場合は文句を言います。私はそれで暮らすことができます)
createdb dbNameTest
pg_dump --schema-only --format c dbName | \
pg_restore --schema-only --clean --dbname=dbNameTest
短いオプションを持つワンライナーは次のようになります。
createdb dbNameTest ; pg_dump -s -F c dbName | pg_restore -s -c -d dbNameTest
sh スクリプトpg_copy_schema
は次のようになります。
#!/bin/sh
if [ -z "$2" ] ; then echo "Usage: `basename $0` original-db new-db" ; exit 1 ; fi
echo "Copying schema of $1 to $2"
createdb "$2" 2> /dev/null
pg_dump --schema-only --format c "$1" | pg_restore --schema-only --clean --dbname="$2"
http://www.postgresql.org/docs/9.1/static/app-pgdump.html
pg_restore で使用するには、pg_dump で -c 、-d、または -t オプションと組み合わせて -F を使用する必要があります。平文の SQL ダンプで pg_restore を使用することはできません。