2011-02-08 42 views
7

Tengo problemas para configurar y ejecutar una determinada base de datos. Estoy tratando de restaurar un volcado de postgreSQL que obtuve de otra persona. He intentado algunos métodos en vano.Configuración de configuraciones regionales en Linux para PostgreSQL

  1. Directamente desde pg_restore

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

  2. Creación de la base de datos y tablas primera

    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

Usando el primer método consigo el siguiente:

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;

Un d utilizando la segunda, cuando intento crear la base de datos me sale:

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

DETAIL: The chosen LC_CTYPE setting requires encoding UTF8.

Por lo tanto, parece ser que no puedo crear una base de datos de codificación LATIN1? ¿Porqué es eso? Soy nuevo en configuraciones regionales y codificación y no sé mucho sobre ellos. Solo sé que el volcado fue hecho de una base de datos LATIN1.

La salida de locale es:

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=

Y la salida de locale -a es:

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

no veo LATIN1 en el segundo comando, debería hacerlo? Si es así, ¿cómo podría agregarlo? ¿Es correcto asumir que necesito cambiar la configuración regional en mi computadora? Si es así, ¿hay alguna forma de hacerlo solo para postgreSQL? Además, cuando intento abrir el volcado, veo un montón de caracteres basura, supongo que esto se debe a la codificación, ¿cómo lo vería correctamente?

Gracias por cualquier ayuda.

Respuesta

6

lo necesario para crear la base de datos con una configuración regional que coincide con la codificación, por ejemplo,

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

Puesto que usted no ha instalado todos los entornos locales, supongo que está usando Debian o Ubuntu. En ese caso, llame al dpkg-reconfigure locales o instale el paquete locales-all.

O bien, cree la base de datos con la codificación UTF8. Siempre y cuando todos sus clientes establezcan la codificación del cliente correctamente, no debería marcar la diferencia.

1

tuve problemas para usar la sintaxis createdb de The_Denominater, así que lo hice de la siguiente manera:

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

Si usted todavía está interesado con el comando recode transformará el volcado de base de datos para el conjunto de caracteres de su elección antes de importarlo a su nueva base de datos. Ver este enlace - http://blog.e-shell.org/134

Cuestiones relacionadas