2011-02-08 15 views
7

Mam problem z uruchomieniem określonej bazy danych. Próbuję przywrócić zrzut postgreSQL, który otrzymałem od kogoś innego. Próbowałem kilka metod bezskutecznie.Konfigurowanie ustawień regionalnych w systemie Linux dla PostgreSQL

  1. Prosto z pg_restore

    pg_restore -C -d postgres --exit-on-error maggie_prod_20111221.dump.sql

  2. Tworzenie bazy danych i tabel pierwszy

    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

Stosując pierwszą metodę otrzymuję następujący:

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;

D Korzystanie z drugą, gdy próbuję i utworzenia bazy danych uzyskać:

createdb: database creation failed: ERROR: encoding LATIN1 does not match locale en_CA.utf8

DETAIL: The chosen LC_CTYPE setting requires encoding UTF8.

więc wydaje się, że nie można utworzyć bazę danych kodowania latin1? Dlaczego? Jestem nowy w ustawieniach lokalnych i kodowaniu i nie wiem zbyt wiele na ich temat. Wiem tylko, że zrzut został wykonany z bazy danych LATIN1.

Wyjście locale jest:

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=

a wyjście locale -a jest:

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

nie widzę latin1 w drugim poleceniu miałbym? Jeśli tak, to w jaki sposób mogę go dodać? Czy to jest właściwe dla mnie założenie, że muszę zmienić ustawienia regionalne na moim komputerze? Jeśli tak, czy istnieje sposób, aby to zrobić tylko dla PostgreSQL? Ponadto, kiedy próbuję otworzyć zrzut, widzę wiele postów śmieci, zakładam, że dzieje się tak z powodu kodowania, w jaki sposób powinienem to właściwie sprawdzić?

Dzięki za pomoc.

Odpowiedz

6

Trzeba utworzyć bazę danych o lokalizacji, który pasuje do kodowania, np

createdb -T template0 maggieprod -E LATIN1 --locale=en_CA 

Skoro nie masz zainstalowane wszystkie lokalizacje, myślę używasz Debiana lub Ubuntu. W takim przypadku należy zadzwonić pod numer dpkg-reconfigure locales lub zainstalować pakiet locales-all.

Można również utworzyć bazę danych z kodowaniem UTF8. Tak długo, jak wszyscy klienci ustawiają kodowanie klienta poprawnie, nie powinno to mieć znaczenia.

1

miałem problemy z wykorzystaniem składni createdb z The_Denominater, więc zrobiłem to w następujący sposób:

CREATE DATABASE maggieprod WITH ENCODING = 'LATIN1' 
    LC_CTYPE = 'en_CA' LC_COLLATE = 'en_CA' 
    TEMPLATE template0; 
0

Jeśli nadal jesteś zainteresowany pomocą polecenia recode zmieni swój zrzut bazy danych do zestawu znaków do wyboru przed zaimportowaniem go do nowej bazy danych. Zobacz ten link - http://blog.e-shell.org/134