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