有没有办法将所有数据库从 Pgadmin 3 从一个 ubuntu 安装移动到另一个 ubuntu 安装。
我已经创建了一个大转储(一个文件,用于从一个系统导出所有数据库)。现在我想在我的 pgadmin3 或 postgres 控制台中导入该大文件。
有什么办法可以实现这个吗?两个安装都有相同的版本和操作系统编号。
两者都安装了 Ubuntu 16.04 LTS 和 Postgres 9.5。
请问还有什么更好的方法来完成这个任务吗?
答案1
执行你所要求的操作的通常方法是以数据库超级用户身份运行(postgresql)
pg_dumpall >file
从一个 postgresql 集群(系统上的所有数据库)导入到一个文件中,然后只需使用
psql
\i file
或者
psql -f file postgresql
阅读 pg_dumpall 手册
man pg_dumpall
如果有必要的话,更改端口等默认设置。
转储包含所需的所有数据库、表和用户重建,以及数据本身。之后,手册建议运行
vacuumdb -a -z
来帮助优化器。
您可以使用 pg_dump 选择一个数据库进行转储/备份。您可以尝试使用 pg_dumpall 的 -l 参数来选择另一个仅包含您感兴趣的数据库的数据库,但我从未这样做过。或者只需编辑包含所有内容的输出文件并删除您不想要的内容。
答案2
例如,你可以将所有数据库、用户(角色)等导出backup.sql
到 pg_dumpall如下所示。 *您最好使用任何超级用户(例如postgres
)来顺利完成此操作而不会出现权限错误,并且pg_dumpall
可以仅以纯文本格式输出 SQL,而不是自定义格式或 tar 格式,并且我的答案解释如何使用导出架构和数据pg_dump和文档解释如何使用以下方式导出和导入pg_dumpall
:
pg_dumpall -U postgres > backup.sql
或者:
pg_dumpall -U postgres -f backup.sql
或者,您可以导出除所有数据库的数据之外的所有内容,如下backup.sql
所示:
pg_dumpall -U postgres -s > backup.sql
或者:
pg_dumpall -U postgres --schema-only > backup.sql
或者,您可以将除所有数据库的模式之外的所有内容导出到backup.sql
仅INSERT
具有列名的语句中,如下所示:
pg_dumpall -U postgres -a --column-inserts > backup.sql
或者:
pg_dumpall -U postgres --data-only --column-inserts > backup.sql
然后,运行上述命令后,您将需要输入多个密码:
Password:
Password:
Password:
...
然后,您可以将backup.sql
(所有内容)导入到 PostgreSQL 中,如下所示。
psql -U postgres -f backup.sql
或者,您可以尝试以下方法,但在 Windows 上不起作用:
psql -U postgres < backup.sql
或者,您可以在以用户(角色)登录后将backup.sql
(所有内容)导入到您的 PostgreSQL 中,如下所示:\i
postgres
psql -U postgres
postgres=# \i backup.sql
或者,您可以backup.sql
像下面这样逐个导入多个数据库。 *您必须事先创建每个数据库(以及仅导入数据的架构),否则会出现错误和我的答案解释如何创建数据库,你必须使用查询语言以纯文本格式导入 SQL,而不是pg_restore可以导入自定义格式或 tar 格式的 SQL,我的答案解释如何导入backup.sql
数据库orange
:
psql -U postgres -f backup.sql orange
psql -U postgres -f backup.sql lemon
psql -U postgres -f backup.sql peach
...
此外,您可以backup.sql
通过设置密码(例如banana
)将所有数据库导出到密码如下所示:
PGPASSWORD=banana pg_dumpall -U postgres > backup.sql
并且,您可以导出除orange
和*apple*
数据库之外的所有数据库backup.sql
,如下所示。 *--exclude-database
一个命令中可以使用多个:
pg_dumpall -U postgres --exclude-database=orange --exclude-database=*apple* > backup.sql
或者:
pg_dumpall -U postgres --exclude-database orange --exclude-database *apple* > backup.sql