Tôi gặp sự cố khi thiết lập và chạy một cơ sở dữ liệu cụ thể. Tôi đang cố gắng để khôi phục một dump postgreSQL tôi nhận được từ người khác. Tôi đã thử một vài phương pháp không có kết quả.Định cấu hình Locales trên Linux cho PostgreSQL
Trực tiếp từ pg_restore
pg_restore -C -d postgres --exit-on-error maggie_prod_20111221.dump.sql
Tạo cơ sở dữ liệu và bảng đầu tiên
createdb -T template0 maggieprod -E LATIN1
SQL:
CREATE TABLESPACE magdat OWNER maggie LOCATION '/somewhere/magdat';
pg_restore -v -d template1 maggie_prod_20110121.dump.sql
Sử dụng phương pháp đầu tiên tôi nhận được như sau:
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2308; 1262 16386 DATABASE maggieprod postgres
pg_restore: [archiver (db)] could not execute query: ERROR: encoding LATIN1 does not match locale en_CA.utf8
DETAIL: The chosen LC_CTYPE setting requires encoding UTF8. Command was: CREATE DATABASE maggieprod WITH TEMPLATE = template0 ENCODING = 'LATIN1' TABLESPACE = magdat;
Một d bằng cách sử dụng thứ hai, khi tôi cố gắng và tạo ra các cơ sở dữ liệu tôi nhận được:
createdb: database creation failed: ERROR: encoding LATIN1 does not match locale en_CA.utf8
DETAIL: The chosen LC_CTYPE setting requires encoding UTF8.
Vì vậy, nó có vẻ là tôi không thể tạo ra một cơ sở dữ liệu mã hóa latin1? Tại sao vậy? Tôi mới dùng ngôn ngữ và mã hóa và không biết nhiều về chúng. Tôi chỉ biết rằng bãi chứa được tạo ra từ một cơ sở dữ liệu LATIN1.
Kết quả của locale
là:
LANG=en_CA.utf8 LC_CTYPE="en_CA.utf8" LC_NUMERIC="en_CA.utf8" LC_TIME="en_CA.utf8" LC_COLLATE="en_CA.utf8" LC_MONETARY="en_CA.utf8" LC_MESSAGES="en_CA.utf8" LC_PAPER="en_CA.utf8" LC_NAME="en_CA.utf8" LC_ADDRESS="en_CA.utf8" LC_TELEPHONE="en_CA.utf8" LC_MEASUREMENT="en_CA.utf8" LC_IDENTIFICATION="en_CA.utf8" LC_ALL=
Và đầu ra của locale -a
là:
C en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZW.utf8 POSIX
Tôi không thấy latin1 trong lệnh thứ hai, phải làm thế? Nếu vậy, làm thế nào tôi sẽ đi về việc thêm nó? Có đúng cho tôi giả định rằng tôi cần thay đổi ngôn ngữ trên máy tính của mình không? Nếu vậy, có cách nào để làm điều đó chỉ cho postgreSQL? Ngoài ra, khi tôi thử và mở bãi chứa, tôi thấy rất nhiều ký tự rác, tôi giả sử điều này là do mã hóa, làm thế nào tôi sẽ xem xét nó đúng cách?
Cảm ơn bạn đã được trợ giúp.