55 votes

Postgresql - paramètre de configuration non reconnu

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

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 vérifié, et le serveur externe fonctionne :

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 fonctionne :

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 

C'est à peu près la même chose. Existe-t-il un site où l'on peut voir tous les paramètres de configuration valides pour chaque version ? Et existe-t-il un moyen de synchroniser deux bases de données de ce type, afin que les incompatibilités de ce genre soient corrigées automatiquement ?

57voto

cjungel Points 181

Selon Notes de mise à jour de Postgresql 9.6 le site idle_in_transaction_session_timeout a été introduit dans la version 9.6.

E.2.3.1.10. Configuration du serveur

Permettre aux sessions de se terminer automatiquement si elles sont en l'état "idle-in-transaction" pendant trop longtemps (Vik Fearing)

Ce comportement est contrôlé par le nouveau paramètre de configuration idle_in_transaction_session_timeout. Cela peut être utile pour empêcher transactions oubliées de garder des verrous ou d'empêcher le nettoyage du vide pendant 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 depuis le serveur source 9.5 et que le paramètre ait été introduit dans le fichier de vidage. Si c'est le cas, je vous recommande d'utiliser une version 9.5 du client pour exporter et importer les données.

1 votes

Cela doit être cela. J'ai fait la sauvegarde avec Postgresql Maestro (c'est un outil d'administration comme pgadmin) sur mon hôte Windows qui a 9.6 installé. Mais la machine invitée a 9.5. La base de données que j'ai sauvegardée fonctionne également en 9.5, il semble donc que Maestro ne prenne pas en compte la version du serveur externe lorsqu'il effectue une sauvegarde.

1 votes

J'ai PostgreSQL v13.1 et je vois toujours l'erreur

8voto

OleTraveler Points 854

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. Exportez en utilisant du texte brut. Vous voudrez probablement utiliser la compression aussi. 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X