Re: recodificar una db

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Jenaro Centeno Gomez <jcenteno(at)aldia(dot)com(dot)mx>
Cc: jose ricardo <joripeca(at)yahoo(dot)com(dot)ar>, psql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: recodificar una db
Date: 2007-05-29 15:20:51
Message-ID: 20070529152051.GB4667@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Jenaro Centeno Gomez escribió:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Alvaro Herrera escribió:
> > jose ricardo escribió:
> >> Hola a todos, Hoy decidi probar la nueva version de pgsql en windows, el problema que tengo es que deseo montar una base de datos existente pero esta codificada en ascii y la nueva instalacion la hice usado utf-8, ¿hay alguna forma de pasar la base de datos que esta en ascii a utf-8?
> >
> > Lo unico que puedes hacer, AFAIK, es un pg_dump de los datos, luego
> > initdb nuevamente, y luego un restore de los datos.
> >
> > Puedes usar la variable de ambiente PGCLIENTENCODING para afectar la
> > codificacion con que ambos pasos hacen el dump/restore.
> >
> Es necesario el initdb Alvaro, porque en mi caso tengo en un ubuntu con postgres 8.2 una base de datos en Latin1 y otra en UTF8 dentro del mismo
> servidor, no sería igual que hiciera un pg_dump sin la sentencia de creación de la base de datos, creara la otra base de datos en UTF8 y cargara el
> dump sin necesidad del initdb?

No, porque lamentablemente el encoding de la BD es dependiente del
locale. Si bien puedes cambiar el encoding al momento de hacer el
create database, lo que escojas debe ser compatible con el locale que
escogiste al hacer initdb

Por lo tanto no puedes tener bases de datos latin1 y utf8
simultaneamente bajo un mismo postmaster (en realidad puedes, como es tu
caso, pero el problema es que algunas operaciones como ORDER BY se
comportaran de maneras extrañas).

Esto dice al respecto en
http://www.postgresql.org/docs/8.2/static/multibyte.html :

Important: Although you can specify any encoding you want for a
database, it is unwise to choose an encoding that is not what is expected by
the locale you have selected. The LC_COLLATE and LC_CTYPE settings imply a
particular encoding, and locale-dependent operations (such as sorting) are
likely to misinterpret data that is in an incompatible encoding.

Since these locale settings are frozen by initdb, the apparent
flexibility to use different encodings in different databases of a cluster is
more theoretical than real. It is likely that these mechanisms will be
revisited in future versions of PostgreSQL.

One way to use multiple encodings safely is to set the locale to C or
POSIX during initdb, thus disabling any real locale awareness.

--
Alvaro Herrera http://www.PlanetPostgreSQL.org/
"Los dioses no protegen a los insensatos. Éstos reciben protección de
otros insensatos mejor dotados" (Luis Wu, Mundo Anillo)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-05-29 15:26:31 Re: RECUPERANDO MIS BASES DE DATOS
Previous Message Richard Clark 2007-05-29 15:13:38 Re: RECUPERANDO MIS BASES DE DATOS