在pgAdmin中将整个数据库(其结构和数据)复制到新数据库的正确方法是什么?
当前回答
在文档中,不鼓励将createdb或CREATE DATABASE与模板一起使用:
尽管可以通过以下方式复制模板1以外的数据库将其名称指定为模板,这还不是通用“复制数据库”功能。主要限制是没有其他会话可以连接到模板数据库它正在被复制。如果有任何其他连接,CREATE DATABASE将失败启动时存在;否则,将创建到模板的新连接数据库被锁定,直到CREATE database完成。
pg_dump或pg_dumpall是复制数据库和所有数据的好方法。如果您使用的是类似于pgAdmin的GUI,则在执行备份命令时,会在后台调用这些命令。复制到新数据库分两个阶段完成:备份和恢复
pg_dumpall保存PostgreSQL集群上的所有数据库。这种方法的缺点是,您最终会得到一个可能非常大的文本文件,其中包含创建数据库和填充数据所需的SQL。这种方法的优点是您可以免费获得集群的所有角色(权限)。要转储所有数据库,请从超级用户帐户执行此操作
pg_dumpall > db.out
和恢复
psql -f db.out postgres
pgdump有一些压缩选项,可以为您提供更小的文件。我有一个生产数据库,每天使用cron作业备份两次
pg_dump --create --format=custom --compress=5 --file=db.dump mydatabase
其中compress是压缩级别(0到9),create告诉pgdump添加命令以创建数据库。使用还原(或移动到新群集)
pg_restore -d newdb db.dump
其中newdb是要使用的数据库的名称。
其他需要考虑的事情
PostgreSQL使用ROLES管理权限。pg_dump不会复制这些文件。此外,我们还没有处理postgresql.conf和pg_hba.conf中的设置(如果要将数据库移动到另一个服务器)。您必须自己计算conf设置。但我刚刚发现了一个备份角色的技巧。角色是在集群级别管理的,您可以使用--Roles only命令行开关要求pg_dumpall仅备份角色。
其他回答
贝尔回答的命令行版本:
createdb -O ownername -T originaldb newdb
这应该在数据库主机(通常是postgres)的权限下运行。
在pgAdmin中,您可以从原始数据库进行备份,然后只需创建一个新数据库并从刚刚创建的备份中恢复:
右键单击源数据库,备份。。。并转储到文件。右键单击,新建对象,新建数据库。。。并命名目的地。右键单击新数据库,还原。。。然后选择文件。
不知道pgAdmin,但pgdump为您提供了SQL中数据库的转储。您只需要使用相同的名称创建数据库
psql mydatabase < my dump
以恢复所有表及其数据和所有访问权限。
在文档中,不鼓励将createdb或CREATE DATABASE与模板一起使用:
尽管可以通过以下方式复制模板1以外的数据库将其名称指定为模板,这还不是通用“复制数据库”功能。主要限制是没有其他会话可以连接到模板数据库它正在被复制。如果有任何其他连接,CREATE DATABASE将失败启动时存在;否则,将创建到模板的新连接数据库被锁定,直到CREATE database完成。
pg_dump或pg_dumpall是复制数据库和所有数据的好方法。如果您使用的是类似于pgAdmin的GUI,则在执行备份命令时,会在后台调用这些命令。复制到新数据库分两个阶段完成:备份和恢复
pg_dumpall保存PostgreSQL集群上的所有数据库。这种方法的缺点是,您最终会得到一个可能非常大的文本文件,其中包含创建数据库和填充数据所需的SQL。这种方法的优点是您可以免费获得集群的所有角色(权限)。要转储所有数据库,请从超级用户帐户执行此操作
pg_dumpall > db.out
和恢复
psql -f db.out postgres
pgdump有一些压缩选项,可以为您提供更小的文件。我有一个生产数据库,每天使用cron作业备份两次
pg_dump --create --format=custom --compress=5 --file=db.dump mydatabase
其中compress是压缩级别(0到9),create告诉pgdump添加命令以创建数据库。使用还原(或移动到新群集)
pg_restore -d newdb db.dump
其中newdb是要使用的数据库的名称。
其他需要考虑的事情
PostgreSQL使用ROLES管理权限。pg_dump不会复制这些文件。此外,我们还没有处理postgresql.conf和pg_hba.conf中的设置(如果要将数据库移动到另一个服务器)。您必须自己计算conf设置。但我刚刚发现了一个备份角色的技巧。角色是在集群级别管理的,您可以使用--Roles only命令行开关要求pg_dumpall仅备份角色。
使用pgAdmin,断开要用作模板的数据库。然后选择它作为创建新数据库的模板,这样可以避免出现已在使用中的错误。
推荐文章
- Postgres唯一约束与索引
- 使用电子邮件地址为主键?
- 选择postgres中字段的数据类型
- 如何在PostgreSQL中查看视图的CREATE VIEW代码?
- 错误:没有唯一的约束匹配给定的键引用表"bar"
- 如何使用新的PostgreSQL JSON数据类型中的字段进行查询?
- 如何彻底清除和重新安装postgresql在ubuntu?
- 分组限制在PostgreSQL:显示每组的前N行?
- IN与PostgreSQL中的ANY运算符
- PSQLException:当前事务被中止,命令被忽略,直到事务块结束
- 添加布尔列到表集默认
- 库未加载:/usr/local/opt/readline/lib/libreadline.6.2.dylib
- 为什么我们需要像RabbitMQ这样的消息代理而不是像PostgreSQL这样的数据库?
- 在PostgreSQL表已经创建后,我可以添加UNIQUE约束吗?
- 如何在postgres数据库中创建单个表的备份?