在pgAdmin中将整个数据库(其结构和数据)复制到新数据库的正确方法是什么?
当前回答
首先,sudo作为数据库用户:
sudo su postgres
转到PostgreSQL命令行:
psql
创建新数据库,授予权限并退出:
CREATE DATABASE new_database_name;
GRANT ALL PRIVILEGES ON DATABASE new_database_name TO my_user;
\d
将结构和数据从旧数据库复制到新数据库:
pg_dump old_database_name | psql new_database_name
其他回答
在pgAdmin中将整个数据库(其结构和数据)复制到新数据库的正确方法是什么?
答覆:
CREATE DATABASE newdb WITH TEMPLATE originaldb;
经过尝试和测试。
以下是仅使用pgadmin4 GUI(通过备份和恢复)在数据库上创建复制的整个过程
Postgres附带Pgadmin4。如果你使用macOS,你可以按CMD+SPACE并键入pgadmin4来运行它。这将在chrome中打开一个浏览器选项卡。
复制步骤
1.创建备份
通过右键单击数据库->“备份”来执行此操作
2.为文件命名。
如测试12345。单击备份。这将创建一个二进制文件转储,它不是.sql格式
3.查看下载位置
屏幕右下角应该有一个弹出窗口。单击“更多详细信息”页面,查看备份下载到的位置
4.查找下载文件的位置
在本例中,它是/users/vincenttang
5.从pgadmin还原备份
假设您正确执行了步骤1到4,您将得到一个还原二进制文件。有时,您的同事可能希望在其本地计算机上使用您的还原文件。让此人转到pgadmin并恢复
通过右键单击数据库->“还原”来执行此操作
6.选择文件查找器
确保手动选择文件位置,不要将文件拖放到pgadmin中的上传器字段。因为您将遇到错误权限。相反,找到您刚刚创建的文件:
7.查找所述文件
您可能需要将右下角的筛选器更改为“所有文件”。此后,从步骤4查找文件。现在点击右下角的“选择”按钮确认
8.还原所述文件
您将再次看到此页面,其中选择了文件的位置。继续并恢复它
9.成功
如果一切正常,右下角将弹出一个指示器,显示成功恢复。您可以导航到表,查看每个表上的数据是否已正确还原。
10.如果不成功:
如果步骤9失败,请尝试删除数据库中的旧公共架构。转到“查询工具”
执行此代码块:
DROP SCHEMA public CASCADE; CREATE SCHEMA public;
现在再次尝试步骤5至9,应该会成功
编辑-一些附加说明。如果您在上传过程中遇到错误,在还原过程中出现类似“archiver header 1.14 unsupported version”的内容,请更新PGADMIN4
在文档中,不鼓励将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,断开要用作模板的数据库。然后选择它作为创建新数据库的模板,这样可以避免出现已在使用中的错误。
推荐文章
- 将varchar字段的类型更改为整数:"不能自动转换为整数类型"
- PostgreSQL可以索引数组列吗?
- PostgreSQL:角色不允许登录
- 如何查找Postgres / PostgreSQL表及其索引的磁盘大小
- 是使用各有一个模式的多个数据库更好,还是使用一个数据库有多个模式更好?
- 如果字符串包含
- 对于PostgreSQL表来说,多大才算太大?
- 将一列的多个结果行连接为一列,按另一列分组
- 使用pgadmin连接到heroku数据库
- 在PostgreSQL中快速发现表的行数
- 更改varchar列的大小为较低的长度
- 如何首次配置postgresql ?
- 数据库性能调优有哪些资源?
- 如何在PostgreSQL中自动更新时间戳
- 当使用JDBC连接到postgres时,是否可以指定模式?