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();