2017-01-08 16 views
17

tôi xuất khẩu cơ sở dữ liệu postgresql từ một máy chủ bên ngoài, và cố gắng để nhập nó vào máy chủ địa phương của tôi nhưng đã nhận lỗi này:PostgreSQL - không được công nhận tham số cấu hình

unrecognized configuration parameter "idle_in_transaction_session_timeout" 

Liệu loại hình báo lỗi có nghĩa là hai máy chủ là sử dụng các phiên bản postgresql khác nhau? Tôi nhìn vào đó, và các máy chủ bên ngoài đang chạy:

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

và máy chủ của tôi đang chạy:

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 

Khá nhiều điều tương tự. Có một trang web nơi bạn có thể xem tất cả các thông số cấu hình hợp lệ cho mỗi phiên bản không? Và có cách nào để đồng bộ hóa hai cơ sở dữ liệu như thế này, vì vậy không tương thích như thế này được vá tự động?

Trả lời

24

Theo Postgresql 9.6 Release Notes thông số idle_in_transaction_session_timeout được giới thiệu trong phiên bản 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.

Vì bạn đang sử dụng phiên bản 9.5 trên máy chủ, thông số không được nhận dạng.

Có thể bạn đã sử dụng phiên bản 9.6 của máy khách Postgresql để xuất dữ liệu từ máy chủ nguồn 9.5 và tham số được giới thiệu trong tệp kết xuất. Nếu đây là trường hợp tôi khuyên bạn nên sử dụng phiên bản ứng dụng khách 9.5 để xuất và nhập dữ liệu.

+1

Đó phải là nó. Tôi đã tạo bản sao lưu với Postgresql Maestro (công cụ quản trị của nó như pgadmin) trên máy chủ Windows của tôi có cài đặt 9.6. Nhưng máy khách có 9,5. Cơ sở dữ liệu mà tôi đã sao lưu cũng đang chạy 9.5, vì vậy có vẻ như Maestro không tính đến phiên bản của máy chủ bên ngoài khi tạo bản sao lưu. –

0

Câu trả lời ngoại lệ là cách để đi, nhưng nếu vì một lý do nào đó bạn không thể nâng cấp phiên bản, đây là giải pháp thay thế.

  1. Xuất bằng văn bản thuần. Bạn có thể muốn sử dụng nén quá. pg_dump -F c -Z 9 dbname > file.zip
  2. Trước khi nhập, chúng tôi cần xóa thông số vi phạm. Để làm điều đó chúng ta có thể sử dụng zcat và grep. zcat file.zip | grep -vw "idle_in_transaction_session_timeout" | psql -d newdb

Lưu ý rằng có những hạn chế khi sử dụng psql thay vì pg_import. Ví dụ, người ta không thể sử dụng -j để nhập đồng thời.

Các vấn đề liên quan