Postgresql - 无法识别的配置参数

时间:2017-01-08 00:30:38

标签: postgresql psql

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

@Query("select s.subscription from subscription_categories s where s.categories = ?1")
    List<Subscription> findUsernameByCategory(String category);



@Query("select s.subscription from categories s where s.categories = ?1")
    List<Subscription> findUsernameByCategory(String category);

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

unrecognized configuration parameter "idle_in_transaction_session_timeout"

我的服务器正在运行:

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

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

2 个答案:

答案 0 :(得分:42)

根据Postgresql 9.6 Release Notes版本9.6中引入了idle_in_transaction_session_timeout参数。

  

E.2.3.1.10。服务器配置

     

允许会话自动终止   闲置交易状态太长时间(Vik Fearing)

     

此行为由新配置参数控制   idle_in_transaction_session_timeout。防止它是有用的   忘记了锁定或防止真空清理的交易   太久了。

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

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

答案 1 :(得分:1)

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

  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
  3. 请注意,使用psql而不是pg_import存在缺点。例如,不能使用-j同时导入。