別のデータベースに復元するだけです。のカスタム形式からのpg_restore
ダンプ-Fc
の場合:pg_dump
createdb newdbname
pg_restore --dbname newdbname database.dump
オプションを使用して作成されていないSQL 形式のダンプの場合:-C
pg_dump
createdb newdbname
psql -f database_dump.sql newdbname
リモート ホストからダンプをストリーミングしている場合は-f database_dump.sql
、ダンプ データが stdin から来ているため省略してください。
新しいDBを作成するためにCREATE DATABASE
別のDBに接続する必要があるため、復元と同じコマンドで簡単に行うことはできません。template1
したがって、あなたの例では次のようになります。
psql -h localhost -U localadmin template1 -c 'CREATE DATABASE newdb;'
pg_dump -U remoteuser -h remoteServer dbname | psql -h localhost -U localadmin newdb
-C
へのフラグの省略に注意してくださいpg_dump
。
最初のコマンドは単なる手書きの書き方createdb -h localhost -U localadmin newdb
です。
更新:フラグを付けてpg_dump
作成されたもので立ち往生している場合は、非常に注意している限り、実際にダンプすることができます。ファイルの先頭には、データベース名を参照する 4 行 (1 行はコメント) のみが必要です。Pg 9.1 でダンプされたデータベース名「regress」の場合:-C
sed
pg_dump -C
--
-- Name: regress; Type: DATABASE; Schema: -; Owner: craig
--
CREATE DATABASE regress WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8';
ALTER DATABASE regress OWNER TO craig;
\connect regress
これは、3 つ (またはコメントを書き直す場合は 4 つ) の非常に特殊なコマンドを使用して、非常に安全に変換できsed
ます。ただし、データベース名に対してグローバルな検索と置換を行うだけではありません。
sed \
-e 's/^CREATE DATABASE regress/CREATE DATABASE newdbname/' \
-e 's/^ALTER DATABASE regress/ALTER DATABASE newdbname/' \
-e 's/^\\connect regress/\\connect newdbname/' \
-e 's/^--Name: regress/--Name: newdbname/'
これは最後の手段です。なしでダンプする方がはるかに優れてい-C
ます。