PostgreSQL:pg_dump + psql 与模板创建之间的区别?

Jin*_*Kim 3 database postgresql

我知道有两种方法可以制作数据库的副本。

一种是将数据库导出为一个巨大的 SQL 文件,然后将其作为单独的数据库加载:

pg_dump <database> | psql <new database>
Run Code Online (Sandbox Code Playgroud)

另一种方法是将数据库名称作为模板传递给数据库创建参数:

createdb -T <database> <new database>
Run Code Online (Sandbox Code Playgroud)

如果有的话,这两种方法有什么区别?使用一个比另一个有什么好处,比如性能?

Pet*_*aut 5

CREATE DATABASE/createdb与模板一起使用会生成目录副本,而pg_dump+psql必须序列化和反序列化整个数据库,将它们往返发送到客户端,并且必须通过事务和预写日志机制运行所有内容。所以前一种方法应该快得多。

缺点是CREATE DATABASE在复制模板数据库时会锁定模板数据库。因此,如果您想创建实时数据库的副本,那将无法正常工作。但是,如果您想快速制作非活动/模板数据库的副本,那么使用CREATE DATABASE可能是正确的解决方案。