web-dev-qa-db-fra.com

Postgresql - paramètre de configuration non reconnu

J'ai exporté une base de données postgresql à partir d'un serveur externe et tenté de l'importer sur mon serveur local, mais j'ai obtenu l'erreur suivante:

unrecognized configuration parameter "idle_in_transaction_session_timeout"

Ce type d'erreur signifie-t-il que les deux serveurs utilisent des versions différentes de postgresql? J'ai examiné cela, et le serveur externe est en cours d'exécution:

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

et mon serveur tourne:

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 

À peu près la même chose. Existe-t-il un site où vous pouvez voir tous les paramètres de configuration valides pour chaque version? Et existe-t-il un moyen de synchroniser deux bases de données comme celle-ci, afin que les incompatibilités comme celle-ci soient corrigées automatiquement?

40
Horse O'Houlihan

Selon Notes de publication de Postgresql 9.6 , le paramètre idle_in_transaction_session_timeout A été introduit dans la version 9.6.

E.2.3.1.10. Configuration du serveur

Autoriser les sessions à se terminer automatiquement si elles sont trop longtemps à l'état inactif dans la transaction (Vik Fearing)

Ce comportement est contrôlé par le nouveau paramètre de configuration idle_in_transaction_session_timeout. Il peut être utile d'empêcher que des transactions oubliées conservent des verrous ou empêchent le nettoyage par aspiration trop longtemps.

Comme vous utilisez la version 9.5 sur le serveur, le paramètre n'est pas reconnu.

Il est possible que vous ayez utilisé la version 9.6 du client Postgresql pour exporter des données du serveur source 9.5 et que le paramètre ait été introduit dans le fichier de vidage. Si tel était le cas, je vous recommanderais d'utiliser une version client 9.5 pour exporter et importer les données.

43
cjungel

La réponse acceptée est la voie à suivre, mais si pour une raison quelconque vous ne pouvez pas mettre à niveau la version, voici une solution de contournement.

  1. Exporter en texte brut. Vous voudrez probablement aussi utiliser la compression. pg_dump -F c -Z 9 dbname > file.Zip
  2. Avant l'importation, nous devons supprimer le paramètre incriminé. Pour ce faire, nous pouvons utiliser zcat et grep. zcat file.Zip | grep -vw "idle_in_transaction_session_timeout" | psql -d newdb

Notez qu'il y a des inconvénients à utiliser psql au lieu de pg_import. Par exemple, on ne peut pas utiliser le -j pour importer simultanément.

2
OleTraveler