PostgreSQL 13:创建数据库的空副本
PostgreSQL 13: create empty copy of database
我有一个带有一些数据库的 AWS RDS PostgreSQL 13 服务器。我必须创建一个数据库的空副本(空意味着模式(表、视图、函数)+ 安全性(用户、角色))。
pg_dump -s
是我要找的吗?
谢谢!
pg_dump -d db_name -s
。您还需要执行 pg_dumpall -g
来获取全局数据,例如角色。这将获取 Postgres 集群的所有全局数据,因此您可能拥有比特定数据库所需的更多数据。
Postgres 允许在创建新数据库时使用服务器上的任何现有数据库作为模板。我不确定 pgAdmin 是否在创建数据库对话框中为您提供了选项,但您应该能够在查询中执行以下操作 window 如果没有:
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
不过,您可能会得到:
ERROR: source database "originaldb" is being accessed by other users
要断开所有其他用户与数据库的连接,您可以使用此查询:
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();
我有一个带有一些数据库的 AWS RDS PostgreSQL 13 服务器。我必须创建一个数据库的空副本(空意味着模式(表、视图、函数)+ 安全性(用户、角色))。
pg_dump -s
是我要找的吗?
谢谢!
pg_dump -d db_name -s
。您还需要执行 pg_dumpall -g
来获取全局数据,例如角色。这将获取 Postgres 集群的所有全局数据,因此您可能拥有比特定数据库所需的更多数据。
Postgres 允许在创建新数据库时使用服务器上的任何现有数据库作为模板。我不确定 pgAdmin 是否在创建数据库对话框中为您提供了选项,但您应该能够在查询中执行以下操作 window 如果没有:
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
不过,您可能会得到:
ERROR: source database "originaldb" is being accessed by other users
要断开所有其他用户与数据库的连接,您可以使用此查询:
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();