Postgresql-нераспознанный параметр конфигурации

я экспортировал базу данных 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 

почти то же самое. Есть ли сайт где можно посмотреть все допустимые параметры конфигурации для каждая версия? И есть ли способ синхронизировать две такие базы данных, чтобы такие несовместимости автоматически исправлялись?

2 ответов


по данным Примечания К Выпуску Postgresql 9.6 на idle_in_transaction_session_timeout параметр был введен в версии 9.6.

э. 2.3.1.10. Конфигурация Сервера

разрешить автоматическое завершение сеансов, если они находятся в Состояние простоя в транзакции слишком долго (Vik Fearing)

это поведение управляется новым параметром конфигурации idle_in_transaction_session_timeout. Это может быть полезно для предотвращения забыли сделок от блокирования или предотвращения вакуумной очистки слишком долго.

Если вы используете версию 9.5 на сервер, параметр не распознается.

возможно, вы использовали версию 9.6 клиента Postgresql для экспорта данных с исходного сервера 9.5, и параметр был введен в файл дампа. Если это так, я бы рекомендовал использовать версию клиента 9.5 для экспорта и импорта данных.


принятый ответ-это путь, но если по какой-то причине вы не можете обновить версию, вот обходной путь.

  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 для импорта одновременно.