我从外部服务器导出了一个postgresql数据库,并试图将其导入到我的本地服务器,但得到了这个错误:
unrecognized configuration parameter "idle_in_transaction_session_timeout"
这类错误是否意味着两个服务器使用的是不同版本的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
我的服务器正在运行:
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
差不多是一样的。是否有一个站点,您可以在其中查看每个版本的所有有效配置参数?有没有一种方法可以像这样同步两个数据库,这样的不兼容性就可以自动修补了?
3条答案
按热度按时间s1ag04yj1#
根据Postgresql 9.6 Release Notes,
idle_in_transaction_session_timeout
参数是在9.6版本中引入的。E.2.3.1.10.服务器配置
如果会话在事务中处于空闲状态时间过长,则允许会话自动终止(Vik恐惧)
此行为由新的配置参数idle_in_transaction_session_timeout控制。它可以用于防止被遗忘的事务持有锁或防止真空清理太长时间。
由于您在服务器上使用的是9.5版,因此无法识别该参数。
有可能您使用了版本9.6的PostgreSQL客户端从源9.5服务器导出数据,并且在转储文件中引入了参数。如果是这种情况,我建议使用9.5客户端版本来导出和导入数据。
nx7onnlm2#
接受的答案是要走的路,但如果由于某种原因,你不能升级版本,这里是一个变通办法。
1.使用纯文本导出。您可能也想使用压缩。
pg_dump -F c -Z 9 dbname > file.zip
1.在导入之前,我们需要删除有问题的参数。要做到这一点,我们可以使用zcat和grep。
zcat file.zip | grep -vw "idle_in_transaction_session_timeout" | psql -d newdb
请注意,使用psql而不是pg_import有一些缺点。例如,不能使用-j并发导入。
hkmswyz63#
我会建议检查你的pg_restore选项;正常的行为将是忽略该误差。
您是否添加了-1或--exit-on-error?