是否有一种简单的方法可以在PostgreSQL 8.1中创建数据库或模式的副本?
我正在测试一些软件,它对数据库中的特定模式进行了大量更新,我想复制它,以便我可以对原始文件进行一些比较。
答案 0 :(得分:30)
如果它位于同一服务器上,则只需使用带有TEMPLATE参数的CREATE DATABASE命令。例如:
CREATE DATABASE newdb WITH TEMPLATE olddb;
答案 1 :(得分:22)
--schema-only
选项的
答案 2 :(得分:11)
如果必须将架构从本地数据库复制到远程数据库,则可以使用以下两个选项之一。
选项A
将架构从本地数据库复制到转储文件。
pg_dump -U postgres -Cs database > dump_file
将转储文件从本地服务器复制到远程服务器。
scp localuser@localhost:dump_file remoteuser@remotehost:dump_file
连接到远程服务器。
ssh remoteuser@remotehost
将架构从转储文件复制到远程数据库。
psql -U postgres database < dump_file
选项B
将架构直接从本地数据库复制到远程数据库,而不使用中间文件。
pg_dump -h localhost -U postgres -Cs database | psql -h remotehost -U postgres database
如果您想了解有关使用pg_dump
复制数据库的选项的更多信息,此blog post可能对您有所帮助。
答案 3 :(得分:1)
这可以通过运行以下命令来完成:
CREATE DATABASE [Database to create] WITH TEMPLATE [Database to copy] OWNER [Your username];
填写数据库名称和用户名后,这将创建指定数据库的副本。只要没有您要复制的数据库的其他活动连接,此方法就起作用。如果还有其他活动的连接,则可以先使用以下命令暂时终止连接:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = '[Database to copy]'
AND pid <> pg_backend_pid();
我为Chartio数据学院写的一篇很好的文章,其中对如何执行此操作进行了更深入的介绍: https://dataschool.com/learn/how-to-create-a-copy-of-a-database-in-postgresql-using-psql
答案 4 :(得分:0)
这是指向备份和恢复的examples的链接。您可以使用备份还原到其他服务器或其他任何