如何在另一个 ubuntu 安装中使用单个文件导入多个 postgres 数据库?

如何在另一个 ubuntu 安装中使用单个文件导入多个 postgres 数据库?

有没有办法将所有数据库从 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.sqlpg_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.sqlINSERT具有列名的语句中,如下所示:

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 中,如下所示:\ipostgres

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

相关内容