Postgresql - 无法识别的配置参数

Hor*_*han 44 postgresql psql

我从外部服务器导出了一个postgresql数据库,并试图将其导入我的本地服务器,但是出现了这个错误:

unrecognized configuration parameter "idle_in_transaction_session_timeout"
Run Code Online (Sandbox Code Playgroud)

这种错误是否意味着两台服务器使用不同版本的postgresql?我调查了一下,外部服务器正在运行:

version
PostgreSQL 9.5.4 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2, 64-bit 
Run Code Online (Sandbox Code Playgroud)

我的服务器正在运行:

version
PostgreSQL 9.5.5 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609, 64-bit 
Run Code Online (Sandbox Code Playgroud)

几乎是一回事.是否有一个站点,您可以在其中查看每个版本的所有有效配置参数?有没有办法同步这样的两个数据库,所以这样的不兼容性会自动修补?

cju*_*gel 44

根据Postgresql 9.6发行说明,idle_in_transaction_session_timeout参数是在9.6版本中引入的.

E.2.3.1.10.服务器配置

如果会话处于空闲状态状态太长时间,则允许会话自动终止(Vik Fearing)

此行为由新配置参数idle_in_transaction_session_timeout控制.防止被遗忘的交易持有锁或防止真空清理时间过长可能很有用.

由于您在服务器上使用的是9.5版,因此无法识别该参数.

您可能使用Postgresql客户端的9.6版本从源9.5服务器导出数据,并且该参数是在转储文件中引入的.如果是这种情况,我建议使用9.5客户端版本导出和导入数据.

  • 一定是这样。我在安装了 9.6 的 Windows 主机上使用 Postgresql Maestro(它是一个像 pgadmin 这样的管理工具)进行了备份。但客机有9.5。我备份的数据库也运行9.5,所以看起来Maestro在备份时没有考虑外部服务器的版本。 (2认同)

Tra*_*ens 7

接受的答案是要走的路,但如果由于某种原因您无法升级版本,这里有一个解决方法。

  1. 使用纯文本导出。您可能也想使用压缩。pg_dump -F c -Z 9 dbname > file.zip
  2. 在导入之前,我们需要删除有问题的参数。为此,我们可以使用 zcat 和 grep。zcat file.zip | grep -vw "idle_in_transaction_session_timeout" | psql -d newdb

请注意,使用 psql 而不是 pg_import 有一些缺点。例如,不能同时使用-j 导入。