[Gfoss] postgresql e l'utf8... una lotta

Ciao a tutti,
è tanto che non faccio una domanda, ma stavolta avrei proprio bisogno di un lume su Postgresql…
Era tanto che non ne mettevo su uno da zero, ed ho visto che la gestione della localizzazione e dei charset si è fatta molto stringente dalla versione 8.3. Adesso il charset del db dev’essere corrispondente al locale della macchina, altrimenti createdb ti risponde picche. Ho trovato conferme sulla ml di PG.

Dunque, mi hanno passato una Ubuntu 9.04 su cui mettere in piedi un server. La macchina è localizzata it_IT.UTF-8, e postgresql di default crea i db in UTF8.
Adesso io devo inserire un po’ di dati in Postgis e che, essendo toponimi italiani, contengono un sacco di accenti.
Vado di shp2pgsql e ‘file -bi’ mi conferma che l’encoding è iso-8859-1 (ovvero latin1, per PG).
Mi sono preoccupato allora di settare il "client_encoding=‘latin1’ " prima di lanciare l’.sql da pgsql.
NIENTE DA FARE.
PG non ne vuole sapere di digerire quegli accenti, e non prova nemmeno a cambiarli. Semplicemente si piglia le righe che gli piacciono e il resto me lo rende indietro senza batter ciglio.

Domanda a tutti i PGisti di gfoss: che devo fare!!! Esperienze simili da condividere? Immagino proprio di sì… tra l’altro tra i dataset da caricare ci sono glli shape istat2008, che molti di voi avranno già maneggiato…

In attesa di eventuali, confortevoli, risposte
vi saluto.
firmato: un uomo risucchiato da un elefante…

Il giorno mar, 06/10/2009 alle 20.30 +0200, G. Allegri ha scritto:

Ciao a tutti,
è tanto che non faccio una domanda, ma stavolta avrei proprio bisogno
di un lume su Postgresql...
Era tanto che non ne mettevo su uno da zero, ed ho visto che la
gestione della localizzazione e dei charset si è fatta molto
stringente dalla versione 8.3. Adesso il charset del db dev'essere
corrispondente al locale della macchina, altrimenti createdb ti
risponde picche. Ho trovato conferme sulla ml di PG.

Dunque, mi hanno passato una Ubuntu 9.04 su cui mettere in piedi un
server. La macchina è localizzata it_IT.UTF-8, e postgresql di default
crea i db in UTF8.
Adesso io devo inserire un po' di dati in Postgis e che, essendo
toponimi italiani, contengono un sacco di accenti.
Vado di shp2pgsql e 'file -bi' mi conferma che l'encoding è iso-8859-1
(ovvero latin1, per PG).
Mi sono preoccupato allora di settare il "client_encoding='latin1' "
prima di lanciare l'.sql da pgsql.
NIENTE DA FARE.
PG non ne vuole sapere di digerire quegli accenti, e non prova nemmeno
a cambiarli. Semplicemente si piglia le righe che gli piacciono e il
resto me lo rende indietro senza batter ciglio.

Domanda a tutti i PGisti di gfoss: che devo fare?!!! Esperienze simili
da condividere? Immagino proprio di sì... tra l'altro tra i dataset da
caricare ci sono glli shape istat2008, che molti di voi avranno già
maneggiato...

In attesa di eventuali, confortevoli, risposte
vi saluto.
firmato: un uomo risucchiato da un elefante...

Ciao Giovanni,
io ho sempre lavorato impostando l'encoding al momento della creazione
del database usando la flag -E

Spero ti possa essere utile

A presto
Luca

Ciao Luca. Il problema è proprio lì. Anch’io facevo in quel modo, ma con la 8.3 mi dà errore, perché l’encoding non matcha con i locales… E sinceramente vorrei evitare di dover mettere mano alla localizzazione della macchina solo per caricare dei dati in postgis! :frowning:

Il giorno 06 ottobre 2009 20.57, Luca Casagrande <luca.casagrande@gmail.com> ha scritto:

Il giorno mar, 06/10/2009 alle 20.30 +0200, G. Allegri ha scritto:

Ciao a tutti,
è tanto che non faccio una domanda, ma stavolta avrei proprio bisogno
di un lume su Postgresql…
Era tanto che non ne mettevo su uno da zero, ed ho visto che la
gestione della localizzazione e dei charset si è fatta molto
stringente dalla versione 8.3. Adesso il charset del db dev’essere
corrispondente al locale della macchina, altrimenti createdb ti
risponde picche. Ho trovato conferme sulla ml di PG.

Dunque, mi hanno passato una Ubuntu 9.04 su cui mettere in piedi un
server. La macchina è localizzata it_IT.UTF-8, e postgresql di default
crea i db in UTF8.
Adesso io devo inserire un po’ di dati in Postgis e che, essendo
toponimi italiani, contengono un sacco di accenti.
Vado di shp2pgsql e ‘file -bi’ mi conferma che l’encoding è iso-8859-1
(ovvero latin1, per PG).
Mi sono preoccupato allora di settare il "client_encoding=‘latin1’ "
prima di lanciare l’.sql da pgsql.
NIENTE DA FARE.
PG non ne vuole sapere di digerire quegli accenti, e non prova nemmeno
a cambiarli. Semplicemente si piglia le righe che gli piacciono e il
resto me lo rende indietro senza batter ciglio.

Domanda a tutti i PGisti di gfoss: che devo fare?!!! Esperienze simili
da condividere? Immagino proprio di sì… tra l’altro tra i dataset da
caricare ci sono glli shape istat2008, che molti di voi avranno già
maneggiato…

In attesa di eventuali, confortevoli, risposte
vi saluto.
firmato: un uomo risucchiato da un elefante…

Ciao Giovanni,
io ho sempre lavorato impostando l’encoding al momento della creazione
del database usando la flag -E

Spero ti possa essere utile

A presto
Luca

On Tue, Oct 06, 2009 at 08:30:07PM +0200, G. Allegri wrote:

La macchina è localizzata it_IT.UTF-8, e
postgresql di default crea i db in UTF8. Adesso io devo
inserire un po' di dati in Postgis e che, essendo toponimi
italiani, contengono un sacco di accenti. Vado di shp2pgsql e
'file -bi' mi conferma che l'encoding è iso-8859-1 (ovvero
latin1, per PG).

Ti consiglio di fare "La Cosa Giusta"(tm), cioè usa sempre e
comunque UTF-8: imposta il locale della tua macchina su
it_UT@UTF-8 e crea il database in UTF8.

Se poi devi caricare dei dati che sono iso-8859-1 li converti
prima con iconv con qualcosa del genere:

cat pippo.sql | iconv -f ISO-8859-1 -t UTF-8 > pippo2.sql

Controlla le opzioni di iconv, perché può comportarsi in diversi
modi: fermarsi in caso di errore, rimuovere i caratteri errati,
ecc.

Tieni presente che spesso i dati di origine (per esempio quelli
ISTAT) hanno encoding misti: cioè le lettere accentate a volte
sono in latin altre volte in utf-8. Il che è non depone a favore
della professionalità di chi ha curato il dato e ti costringe ad
un lavoro di pre-processing manuale.

--
Niccolo Rigacci
Firenze - Italy

Ciao Niccolò.
Il locale E’ it_IT.UTF_8, e il db UTF8
Avevo fatto proprio come dici tu, ma iconv mi sbatte fuori solo mezza roba. Sospetto che il problema sia proprio il mischione di encoding che hanno fatto…
Ne traggo l’amara conclusione che toccherà mettersi con santa pazienza a sistemare i dati di partenza a mano!

Il giorno 06 ottobre 2009 21.18, Niccolo Rigacci <niccolo@faunalia.it> ha scritto:

On Tue, Oct 06, 2009 at 08:30:07PM +0200, G. Allegri wrote:

La macchina è localizzata it_IT.UTF-8, e
postgresql di default crea i db in UTF8. Adesso io devo
inserire un po’ di dati in Postgis e che, essendo toponimi
italiani, contengono un sacco di accenti. Vado di shp2pgsql e
‘file -bi’ mi conferma che l’encoding è iso-8859-1 (ovvero
latin1, per PG).

Ti consiglio di fare "La Cosa Giusta"™, cioè usa sempre e
comunque UTF-8: imposta il locale della tua macchina su
it_UT@UTF-8 e crea il database in UTF8.

Se poi devi caricare dei dati che sono iso-8859-1 li converti
prima con iconv con qualcosa del genere:

cat pippo.sql | iconv -f ISO-8859-1 -t UTF-8 > pippo2.sql

Controlla le opzioni di iconv, perché può comportarsi in diversi
modi: fermarsi in caso di errore, rimuovere i caratteri errati,
ecc.

Tieni presente che spesso i dati di origine (per esempio quelli
ISTAT) hanno encoding misti: cioè le lettere accentate a volte
sono in latin altre volte in utf-8. Il che è non depone a favore
della professionalità di chi ha curato il dato e ti costringe ad
un lavoro di pre-processing manuale.


Niccolo Rigacci
Firenze - Italy


Iscriviti all’associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@faunalia.it
http://lists.faunalia.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell’Associazione GFOSS.it.

On Tue, Oct 06, 2009 at 08:30:07PM +0200, G. Allegri wrote:

Vado di shp2pgsql e 'file -bi' mi conferma che l'encoding è iso-8859-1
(ovvero latin1, per PG).
Mi sono preoccupato allora di settare il "client_encoding='latin1' " prima
di lanciare l'.sql da pgsql.

prova a passare -W Latin1 a shp2pgsql

--strk;

Free GIS & Flash consultant/developer () ASCII Ribbon Campaign
http://foo.keybit.net/~strk/services.html /\ Keep it simple!

non ho elencato tutte le prove che ho fatto, ma c’era anche questa… e stranamente non gli è piaciuta. Adesso (grazie a Luca) provo con una versione convertita ad UTF con gedit…

giova

Il giorno 07 ottobre 2009 09.58, strk <strk@keybit.net> ha scritto:

On Tue, Oct 06, 2009 at 08:30:07PM +0200, G. Allegri wrote:

Vado di shp2pgsql e ‘file -bi’ mi conferma che l’encoding è iso-8859-1
(ovvero latin1, per PG).
Mi sono preoccupato allora di settare il "client_encoding=‘latin1’ " prima
di lanciare l’.sql da pgsql.

prova a passare -W Latin1 a shp2pgsql

–strk;

Free GIS & Flash consultant/developer () ASCII Ribbon Campaign
http://foo.keybit.net/~strk/services.html /\ Keep it simple!

Ciao!
Non sono un guru di Postgres, ti dico come l'ho risolto io.
Il problema è che il cluster di Postgres, che è la megastruttura di cartelle e
file che lui usa per memorizzare i dati sul disco, il cluster è stato creato
con un certo locale, UTF8 (ora i singoli termini non me li ricordo in modo
preciso). Lo crea Ubuntu all'installazione del pacchetto.
Con quel cluster non hai chance: puoi solo creare database UTF8.

Se vuoi avere la possibilità di creare database LATIN1, LATIN9, o tutti quelli
che vuoi, scegliendo al momento di creare il database, allora non c'è
alternativa che abbandonare quel cluster e crearne un altro (con qualcosa del
tipo:
/usr/lib/postgresql/8.3/bin/initdb --locale=C -D /usr/local/pgsql/data/

Una volta fatto questo, puoi scegliere di volta in volta, invece con --
locale=...UTF8... (non mi ricordo com'è esattamente) non hai chance, solo UTF8
per tutti.

Il manuale ha un paio di pagine esaustive sull'argomento:
http://www.postgresql.org/docs/8.3/static/multibyte.html

I miei due centesimi.

Ciao,
Vito Meuli

On Tuesday 06 October 2009 20:30:07 G. Allegri wrote:

Ciao a tutti,
è tanto che non faccio una domanda, ma stavolta avrei proprio bisogno di un
lume su Postgresql...
Era tanto che non ne mettevo su uno da zero, ed ho visto che la gestione
della localizzazione e dei charset si è fatta molto stringente dalla
versione 8.3. Adesso il charset del db dev'essere corrispondente al locale
della macchina, altrimenti createdb ti risponde picche. Ho trovato conferme
sulla ml di PG.

Dunque, mi hanno passato una Ubuntu 9.04 su cui mettere in piedi un server.
La macchina è localizzata it_IT.UTF-8, e postgresql di default crea i db in
UTF8.
Adesso io devo inserire un po' di dati in Postgis e che, essendo toponimi
italiani, contengono un sacco di accenti.
Vado di shp2pgsql e 'file -bi' mi conferma che l'encoding è iso-8859-1
(ovvero latin1, per PG).
Mi sono preoccupato allora di settare il "client_encoding='latin1' " prima
di lanciare l'.sql da pgsql.
NIENTE DA FARE.
PG non ne vuole sapere di digerire quegli accenti, e non prova nemmeno a
cambiarli. Semplicemente si piglia le righe che gli piacciono e il resto me
lo rende indietro senza batter ciglio.

Domanda a tutti i PGisti di gfoss: che devo fare?!!! Esperienze simili da
condividere? Immagino proprio di sì... tra l'altro tra i dataset da
caricare ci sono glli shape istat2008, che molti di voi avranno già
maneggiato...

In attesa di eventuali, confortevoli, risposte
vi saluto.
firmato: un uomo risucchiato da un elefante...

grazie Vito. Mi sa che farò così, perché per adesso nessuna soluzione (stranamente) ha funzionato. Nemmeno la conversione a UTF8 con gedit (grazie lo stesso Luca!).

giovanni

Il giorno 07 ottobre 2009 11.42, Vito Meuli <v.meuli@tecnologieavanzate.it> ha scritto:

Ciao!
Non sono un guru di Postgres, ti dico come l’ho risolto io.
Il problema è che il cluster di Postgres, che è la megastruttura di cartelle e
file che lui usa per memorizzare i dati sul disco, il cluster è stato creato
con un certo locale, UTF8 (ora i singoli termini non me li ricordo in modo
preciso). Lo crea Ubuntu all’installazione del pacchetto.
Con quel cluster non hai chance: puoi solo creare database UTF8.

Se vuoi avere la possibilità di creare database LATIN1, LATIN9, o tutti quelli
che vuoi, scegliendo al momento di creare il database, allora non c’è
alternativa che abbandonare quel cluster e crearne un altro (con qualcosa del
tipo:
/usr/lib/postgresql/8.3/bin/initdb --locale=C -D /usr/local/pgsql/data/

Una volta fatto questo, puoi scegliere di volta in volta, invece con –
locale=…UTF8… (non mi ricordo com’è esattamente) non hai chance, solo UTF8
per tutti.

Il manuale ha un paio di pagine esaustive sull’argomento:
http://www.postgresql.org/docs/8.3/static/multibyte.html

I miei due centesimi.

Ciao,
Vito Meuli

On Tuesday 06 October 2009 20:30:07 G. Allegri wrote:

Ciao a tutti,
è tanto che non faccio una domanda, ma stavolta avrei proprio bisogno di un
lume su Postgresql…
Era tanto che non ne mettevo su uno da zero, ed ho visto che la gestione
della localizzazione e dei charset si è fatta molto stringente dalla
versione 8.3. Adesso il charset del db dev’essere corrispondente al locale
della macchina, altrimenti createdb ti risponde picche. Ho trovato conferme
sulla ml di PG.

Dunque, mi hanno passato una Ubuntu 9.04 su cui mettere in piedi un server.
La macchina è localizzata it_IT.UTF-8, e postgresql di default crea i db in
UTF8.
Adesso io devo inserire un po’ di dati in Postgis e che, essendo toponimi
italiani, contengono un sacco di accenti.
Vado di shp2pgsql e ‘file -bi’ mi conferma che l’encoding è iso-8859-1
(ovvero latin1, per PG).
Mi sono preoccupato allora di settare il "client_encoding=‘latin1’ " prima
di lanciare l’.sql da pgsql.
NIENTE DA FARE.
PG non ne vuole sapere di digerire quegli accenti, e non prova nemmeno a
cambiarli. Semplicemente si piglia le righe che gli piacciono e il resto me
lo rende indietro senza batter ciglio.

Domanda a tutti i PGisti di gfoss: che devo fare?!!! Esperienze simili da
condividere? Immagino proprio di sì… tra l’altro tra i dataset da
caricare ci sono glli shape istat2008, che molti di voi avranno già
maneggiato…

In attesa di eventuali, confortevoli, risposte
vi saluto.
firmato: un uomo risucchiato da un elefante…