Newsgroup: it.comp.software.database
Titolo: Problema locale postgres

Ciao...
ho un problema: usando postgresql 8 sotto linux, mi accetta per campi
real o float4 che dir si voglia la sintassi 20.10, per fare un esempio,
e sto usando il locale it_IT. Ma perche'? Non dovrebbe usare la virgola
come separatore decimale, forzandomi quindi a inserire dati come "20,10"
con le virgolette ovviamente?
Il fatto per cui questo comportamento, che mi risulta un po' strano, mi da
fastidio e' che sotto OS/2 la stessa versione di postgres con lo stesso
locale usa la virgola come separatore, quindi i dati generati da pg_dump
su un sistema operativo sono incompatibili nell'altro. 
Secondo voi, chi ha ragione? A me pare OS/2, in Italia si usa la virgola
come separatore decimale, ma possibile che su postgres linux ci sia un 
tale bug?
Byebye
-- 
Daneel

 con le virgolette ovviamente?
in alcune distribuzioni binarie di postgres il supporto locale non č 
compilato per motivi di prestazioni. Probabilmente la versione che hai 
per le mani č una di queste.
-- 
Fabrizio "Hermooz" Ermini

 Secondo voi, chi ha ragione?
In qualsiasi caso ha ragione la versione per linux. Questo perche` la
sintassi dell'INSERT e` normalmente questa:
INSERT INTO tabella [(colonna, colonna, colonna)] VALUES (intero,
       'carattere', intero.decimale);
Se tu quindi vai ad utilizzare la virgola come separatore decimanle,
rischieresti di stravolgere tale sintassi creando query che rischierebbero
di non funzionare da un server all'altro (o, addirittura, dallo stesso nel
momento in cui si va ad aggiornare il server). Personalmente parlando,
inoltre, ritengo che mantenere una gestione delle query come quella da te
descrita dovrebbe essere addirittura vietata dal motore RDBMS
indipendentemente dal tipo di localizzazione utilizzata
Henryx
P.S. che tu sia maledetto, OS/2 era il sistema operativo che secondo me
doveva vingere la battaglia contro MS :(



A dire la verita' su linux ho compilato personalmente postgres che mi
dice esplicitamente che quando faccio initdb sta usando il locale it_IT,
e la stessa cosa vale per OS/2, dove sono in contatto con chi ha fatto
il porting e mi assicura che vale lo stesso di cui sopra.
Morale, non ho purtroppo una spiegazione.
-- 
Daneel

 doveva vingere la battaglia contro MS :(
Be', sta forse rinascendo lentamente con un nuovo nome e nuove feature:
Serenity Systems eComStation, 
http://www.ecomstation.com
-- 
Daneel

 secondo l'SQL. Si', ma allora, il locale a che serve?
Come hai giustamente notato, il locale non serve per l'input, ma per
l'output. Per farti un esempio, da me PostgreSQL estrae le date in formato
ISO (YYYY-MM-DD), in quanto il locale e` impostato a C . Da te, invece, le
estrarra` in formato standard europeo (MM-DD-YYYY) in quanto il locale del
tuo db e` it_IT
Henryx

l'output. 
Anche io ho avuto problemi con questo, su Windows.
Il problema e' che a volte devo importare valori in virgola mobile con
',' come separatore.
La soluzione che ho adottato e' pre elaborare i dati (con Python).
Forse una soluzione alternativa e' usare i trigger: creare una tabella
in cui i campi float sono sostituiti con stringhe e poi rimandare i
dati alla tabella 'vera', usando to_number (a proposito, ma queste
funzioni sono standard?)
Saluti  Manlio Perillo