只需恢复到不同的数据库。对于来自的自定义格式pg_restore
的-Fc
转储:pg_dump
createdb newdbname
pg_restore --dbname newdbname database.dump
对于未-C
使用以下选项创建的SQL 格式转储pg_dump
:
createdb newdbname
psql -f database_dump.sql newdbname
如果您从远程主机流式传输转储,只需省略-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
标志 to pg_dump
。
第一个命令只是普通的书写方式createdb -h localhost -U localadmin newdb
。
更新:如果你坚持使用标志pg_dump
创建,只要你非常小心,你确实可以只转储。文件开头应该只有四行(一行注释)引用数据库名称。对于使用 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
这可以通过三个(或四个,如果你想重写注释)非常具体的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
.