剛恢復到不同的數據庫中的命令。從pg_dump
的自定義格式-Fc
的pg_restore
轉儲:
createdb newdbname
pg_restore --dbname newdbname database.dump
對於SQL格式轉儲不是創建的-C
選項pg_dump
:
createdb newdbname
psql -f database_dump.sql newdbname
如果你從流轉儲遠程主機,因爲轉儲數據來自stdin,所以只需省略-f database_dump.sql
。
您不能輕鬆CREATE DATABASE
與恢復相同的命令,因爲您需要連接到不同的數據庫,如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
的一種長效方式。
更新:如果你堅持與-C
標誌創建一個pg_dump
你的確可以只sed
轉儲,只要你是非常小心。在文件的開頭應該只有四行(一個註釋)引用數據庫名稱。對於數據庫名稱「迴歸」與PG 9.1的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
這可以很安全地用三個(或四個,如果你想重寫評論)非常具體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
就更好了。