使用PostgreSQL的PgAdmin-III导出数据库

8
如何将PostgreSQL数据库导出为可在其他pgAdmin中执行的SQL?
  • 备份文件导出时,版本不同无法使用
  • 导出为SQL文件时,在不同的pgAdmin上运行时无法执行
我尝试使用pgAdmin III导出数据库,但是当我尝试在其他pgAdmin中执行SQL时,它会抛出SQL错误。当我尝试“还原”备份文件时,它会提示版本不同无法导入/还原。
因此,是否有一种“安全”的方法可以将数据库导出为标准SQL,可以在pgAdmin SQL编辑器中明确执行,而不管它是哪个版本?

所以我猜你尝试过像https://dev59.com/Jm445IYBdhLWcg3w_PG3中描述的那样做了? - Jerska
是的,我已经尝试使用'psql',但是没有任何反应,也没有错误提示,但数据库没有更新表等内容。 - quarks
所以我在考虑一种更通用的方法,即可以在任何版本的postgreSQL中执行的SQL备份。 - quarks
你如何尝试在pgAdmin中运行SQL转储?你将其复制粘贴到SQL控制台中吗?你遇到了什么错误?你是否尝试导出/导入某些系统表的内容或其他东西? - Danubian Sailor
1
你的问题中不应该出现"throws an error"。请提供错误信息,包括PgAdmin-III版本和PostgreSQL版本。当你说在不同的版本下 "doesn't work" 时,具体是指什么情况?请详细描述。 - Craig Ringer
在这种情况下,这是一个糟糕的工具。在phpMyadmin中,创建转储非常直观,人们不需要去StackOverflow,即使在那之后也不会出现问题! - fresko
2个回答

8
不要试图使用PgAdmin-III来完成这个任务。如果可能的话,请直接使用pg_dumppg_restore。使用目标服务器上的pg_dump版本来转储源服务器。因此,如果您从8.4升级到9.2,则需要使用9.2的pg_dump创建一个转储。如果您创建了一个自定义格式的-Fc转储(推荐),则可以使用pg_restore将其应用于新的数据库服务器。如果您创建了一个常规的SQL转储,则可以使用psql应用它。
请参见有关升级PostgreSQL集群的手册
现在,如果您要降级,那就是完全不同的问题。
您将很难创建适用于任何版本的PostgreSQL的SQL转储。假设您创建了一个使用WITH查询的视图。当恢复到不支持WITH的PostgreSQL 8.3时,这将无法工作。还有大量其他的例子。如果必须支持旧的PostgreSQL版本,请在仍然支持的最旧版本上进行开发,然后导出它的转储以供新版本加载。您无法在新版本上进行开发并导出旧版本,如果能工作,也不会很好。
更为麻烦的是,在旧版本上进行开发并不能保证您的代码在新版本上也能正常工作。有时会添加新关键字,引入新规范特性的支持。有时会以影响用户代码的方式修复问题。例如,如果您在(古老且不受支持的)8.2上进行开发,则在8.3及以上版本上会遇到许多隐式转换为文本的问题。
最好的方法是在所有支持的版本上进行测试。考虑使用类似Jenkins CI的自动化测试来设置。是的,这很麻烦,但这是软件随时间改进的代价。如果Pg保持完美的向后和向前兼容性,它将永远无法改进。

3

使用pg_dump和psql进行导出/导入

1.设置PGPASSWORD

export PGPASSWORD='123123123';

2. 使用 pg_dump 导出数据库

pg_dump -h <<host>> -U <<username>> <<dbname>> > /opt/db.out 

/opt/db.out是转储路径,您可以指定自己的路径。
3.然后重新设置另一个主机的PGPASSWORD。如果主机相同或密码相同,则不需要此操作。
4.在另一个主机上导入数据库。
psql -h <<host>> -U <<username>> -d <<dbname>> -f /opt/db.out

如果用户名不同,请在db.out文件中查找并替换为您的本地用户名。请确保仅替换了用户名,而非数据。
如果您仍然希望使用PGAdmin,则请参阅以下步骤。

使用PGAdmin导出数据库:

选择数据库并单击“导出”。

  1. 文件选项
    • 为您的本地目录命名DB文件名
    • 选择格式-普通文本
  2. 忽略Dump选项#1
  3. Dump Options #2
    • 选择使用插入命令
  4. 对象
    • 取消勾选表格(如果您不需要任何表格)

使用PGAdmin导入数据库:

  1. Create New DB.
  2. By keeping selected DB, Click Menu->Plugins->PSQL Console
  3. Type following command to import DB

    \i /path/to/db.sql
    
如果您想分别导出模式和数据,请按以下步骤操作。 导出模式 1. 文件选项
- 在本地目录中为模式文件命名 - 选择格式 - 纯文本
2. 转储选项 #1
- 勾选 仅模式 - 勾选 Blobs(默认已勾选) 导出数据 1. 文件选项
- 在本地目录中为数据文件命名 - 选择格式 - 纯文本
2. 转储选项 #1
- 勾选 仅数据 - 勾选 Blobs(默认已勾选)
3. 转储选项 #2
- 勾选 使用插入命令 - 勾选 详细信息(默认已勾选)
注意:根据数据库大小,导出/导入需要一定时间,并且使用PGAdmin会增加一些时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接