2017-01-08 36 views
17

I eksportowane do bazy danych PostgreSQL z serwera zewnętrznego i próbował zaimportować go do mojego serwera lokalnego, ale mam ten błąd:Postgresql - nierozpoznany parametr konfiguracyjny

unrecognized configuration parameter "idle_in_transaction_session_timeout" 

Czy ten rodzaj błędu oznacza, że ​​oba serwery są używając różnych wersji postgresql? Patrzyłem na to i serwer zewnętrzny jest uruchomiony:

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

i mój serwer jest uruchomiony:

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 

Prawie to samo. Czy istnieje strona, na której można zobaczyć wszystkie poprawne parametry konfiguracji dla każdej wersji? Czy istnieje sposób na zsynchronizowanie dwóch takich baz danych, więc niezgodności takie jak ta zostaną automatycznie naprawione?

Odpowiedz

24

Zgodnie z Postgresql 9.6 Release Notes parametr idle_in_transaction_session_timeout wprowadzono w wersji 9.6.

E.2.3.1.10. Server Configuration

Allow sessions to be terminated automatically if they are in idle-in-transaction state for too long (Vik Fearing)

This behavior is controlled by the new configuration parameter idle_in_transaction_session_timeout. It can be useful to prevent forgotten transactions from holding locks or preventing vacuum cleanup for too long.

Ponieważ używasz wersji 9.5 na serwerze, parametr nie jest rozpoznawany.

Możliwe, że użyto wersji 9.6 klienta PostgreSQL do eksportu danych ze źródłowego serwera 9.5, a parametr został wprowadzony w pliku zrzutu. W takim przypadku zaleciłbym użycie wersji klienta 9.5 do eksportu i importu danych.

+1

To musi być to. Zrobiłem kopię zapasową za pomocą PostgreSQL Maestro (jest to narzędzie administratora, takie jak pgadmin) na moim komputerze z systemem Windows, który ma zainstalowany 9.6. Ale maszyna-gość ma 9,5. Baza danych, której kopię zapasową wykonałem, również działa 9.5, więc wygląda na to, że Maestro nie bierze pod uwagę wersji zewnętrznego serwera podczas tworzenia kopii zapasowej. –

0

Wyjątek stanowi droga, ale jeśli z jakiegoś powodu nie można uaktualnić wersji, oto sposób obejścia tego problemu.

  1. Eksportuj za pomocą zwykłego tekstu. Prawdopodobnie chcesz też użyć kompresji. pg_dump -F c -Z 9 dbname > file.zip
  2. Przed importem musimy usunąć niepoprawny parametr. Aby to zrobić, możemy użyć zcat i grep. zcat file.zip | grep -vw "idle_in_transaction_session_timeout" | psql -d newdb

Należy zauważyć, że istnieją wady przy użyciu psql zamiast pg_import. Na przykład nie można użyć opcji -j, aby importować jednocześnie.