Sij*_*tha 4 postgresql replication
我想复制 Postgres 数据库而不使用pg_dump
. 源数据库和目标数据库都在同一台机器上(测试和生产服务器)。
我想创建master_db_copy
生产服务器的精确副本master_db
。
我从命令行尝试过:
pg_dump -vO master_db | gzip > master_db
gunzip -cV master_db.sql.gz | psql master_db_copy
Run Code Online (Sandbox Code Playgroud)
有更好/更快的方法吗?
在同一数据库集群中复制完整数据库的最快方法是CREATE DATABASE
使用TEMPLATE
. 这只是在文件级别复制整个数据库。
CREATE DATABASE master_db_copy TEMPLATE master_db;
Run Code Online (Sandbox Code Playgroud)
您必须是模板的超级用户或所有者(master_db
在示例中) - 除非它在pg_database.datistemplate
.
并且模板不能与它有并发连接。专用模板数据库通过设置pg_database.datallowconn
. 您可能会使用pg_terminate_backend()
来关闭连接。看:
pg_database
每个数据库都存在两个有用的标志:列datistemplate
和datallowconn
.datistemplate
可以设置为指示数据库旨在作为CREATE DATABASE
. 如果设置了此标志,则任何具有CREATEDB
权限的用户都可以克隆数据库;如果未设置,则只有超级用户和数据库所有者才能克隆它。如果datallowconn
为 false,则不允许与该数据库建立新连接(但现有会话不会简单地通过设置标志 false 来终止)。datistemplate = true
. [...]