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
Почти то же самое. Есть ли сайт, на котором вы можете увидеть все допустимые параметры конфигурации для каждой версии? И есть ли способ синхронизировать две базы данных, подобные этому, поэтому такие несовместимости, как это, автоматически исправляются?
Ответы
Ответ 1
Согласно Notes Postgresql 9.6 Release, параметр idle_in_transaction_session_timeout
был введен в версии 9.6.
E.2.3.1.10. Конфигурация сервера
Разрешить сеансы автоматически завершаться, если они слишком долго находятся в состоянии незанятости (Vik Fearing)
Это поведение контролируется новым параметром конфигурации idle_in_transaction_session_timeout. Это может быть полезно для предотвращения забытых транзакций от фиксации замков или предотвращения чрезмерной очистки вакуума.
Поскольку вы используете версию 9.5 на сервере, параметр не распознается.
Возможно, вы использовали версию 9.6 клиента Postgresql для экспорта данных с исходного сервера 9.5, и этот параметр был введен в файл дампа. Если бы это было так, я бы рекомендовал использовать версию клиента 9.5 для экспорта и импорта данных.
Ответ 2
Принятый ответ - путь, но если по какой-то причине вы не можете обновить версию, вот обходной путь.
- Экспорт с использованием обычного текста. Вероятно, вы тоже захотите использовать сжатие.
pg_dump -F c -Z 9 dbname > file.zip
- Перед импортом нам нужно удалить параметр нарушения. Для этого мы можем использовать zcat и grep.
zcat file.zip | grep -vw "idle_in_transaction_session_timeout" | psql -d newdb
Обратите внимание, что есть недостатки с использованием psql вместо pg_import. Например, нельзя одновременно использовать -j для импорта.