Localizzare PostgreSQL su Ubuntu

Postgres ha un suporto per la nazionalizzazione molto avanzato ma questo deve essere compilato con l’opzione NLS (National Language Support).La mia esperienza è che nei repositori di ubuntu Postgres è stato compilato senza NLS mentre nei repository che trovate indicato nell’articolo che spiega come installare PostgreSQL su ubuntu il supporto NLS c’è.

Oltre però al supporto da parte di Postgres dobbiamo avere quello del sistema operativo.
In particolare parleremo di Ubuntu, i concetti sono simili anche su Windows, ma lì in più c’è il problema che il supporto per una lingua diversa da quella acquistata è disponibile solo a pagamento e per attivarlo ci sono procedure diverse da versione a versione. (chi ha capito … cambi sistema operativo …)

In ubuntu per visualizzare le localizzazioni disponibili si esegue il comando:

locale -a

il risultato sarà qualcosa del tipo:

C
C.UTF-8
en_US.utf8
it_IT.utf8
POSIX

per vedere invece quelle disponibili basta visualizzare l’apposito file con il comando:

more /usr/share/i18n/SUPPORTED

se vi vuole aggiungerne qualcuna alla nostra installazione basta usare il comando

sudo locale-gen  it_IT.UTF-8

seguito da:

dpkg-reconfigure locales

controlliamo quindi con il già visto:

locale -a

che la localizzazione voluta sia presente.

Tornando invece al nostro postgres, le varibile che sottendono alla localizzazione sono le seguenti:

LC_COLLATE  String sort order
LC_CTYPE    Character classification
            (What is a letter? Its upper-case equivalent?)
LC_MESSAGES Language of messages
LC_MONETARY Formatting of currency amounts
LC_NUMERIC  Formatting of numbers
LC_TIME     Formatting of dates and times

Le prime due (LC_COLLATE, LC_CTYPE) sono indicate al momento della creazione del database, se invece non vengono specificate si usano quelle del template database.

Le altre possono essere cambiate in qualsiasi momento oppure venire specificate una volta per tutte nel file di configurazione:

/etc/postgresql/<version>/main/postgresql.conf

ovviamente alla stringa: ‘<version>’ si deve sostituire il numero della release di postgre: al tempo in cui scrivo, ad esempio, 9.6.
Se prima di eseguire un comando impostiamo, ad esempio:

SET LC_MESSAGES TO 'en_US.UTF-8';

all’esecuzione di:

SELECT pippo;

avremo come risposta:

ERROR: column "pippo" does not exist
LINE 1: SELECT pippo
 ^
********** Error **********

ERROR: column "pippo" does not exist
SQL state: 42703
Character: 8

Mentre se impostiamo:

SET LC_MESSAGES TO 'it_IT.UTF-8';

e ripetiamo il comando di cui sopra avremo:

ERRORE: la colonna "pippo" non esiste
LINE 1: SELECT pippo
 ^
********** Error **********

ERRORE: la colonna "pippo" non esiste
SQL state: 42703
Character: 8

Alla prossima

Andrea

Lascia un commento