== Notiziario settimanale PostgreSQL, 16 novembre 2008 ==

From: Gianni Ciolli <gianni(dot)ciolli(at)2ndquadrant(dot)it>
To: pgsql-it-generale(at)postgresql(dot)org
Subject: == Notiziario settimanale PostgreSQL, 16 novembre 2008 ==
Date: 2008-11-21 18:56:27
Message-ID: 20081121185627.GA9298@fune
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-it-generale

== Notiziario settimanale PostgreSQL - 16 novembre 2008 ==

(Traduzione in lingua italiana delle PostgreSQL Weekly News
a cura di Gianni Ciolli <gianni(dot)ciolli(at)2ndquadrant(dot)it>)

Presto in Bruxelles si terrà FOSDEM. Sotto riportiamo i dettagli.

== Novità sul prodotto PostgreSQL ==

Rilasciata la versione 1.2.6 di MicroOLAP Database Designer per
PostgreSQL.
http://microolap.com/products/database/postgresql-designer/

Rilasciato PGUnit.
http://en.dklab.ru/lib/dklab_pgunit/

Rilasciata la versione 1.0.5 beta di PyReplica.
http://pgfoundry.org/projects/pyreplica/

== Offerte di lavoro su PostgreSQL per novembre 2008 ==

http://archives.postgresql.org/pgsql-jobs/2008-11/threads.php

== Notizie locali su PostgreSQL ==

Il PgDay di Rio de la Plata sta cercando sponsor. Gli interessati si
mettano in contatto con admin AT postgres-arg DOT org.

Dickson Guedes sta cercando volontari per aiutarlo nell'organizzazione
di un PgMeeting a Florianópolis. Scrivi a guediz AT gmail DOT com se
puoi essergli d'aiuto.

Il prossimo 22 novembre David Fetter parlerà al PGDay di Rio de la
Plata Buenos Aires
http://pgday.postgres-arg.org/

David Fetter parlerà a Sydney in occasione dell'OSDC che si terrà dal
3 al 5 dicembre prossimi.
http://www.osdc.com.au/2008/index.html

FOSDEM 2009 si terrà a Bruxelles, in Belgio, nei giorni 7 e 8 febbraio
2009. PostgreSQL, oltre a condividere uno stand con i gruppi di BSD,
avrà una developer room. Inviate le vostre proposte di talk
(lightning, 20 minuti o 45 minuti) a fosdem (at) postgresql (dot) org.

== Rassegna stampa su PostgreSQL ==

Planet PostgreSQL: http://planet.postgresql.org/

Questo notiziario settimanale PostgreSQL è stato realizzato da David
Fetter; traduzione in lingua italiana a cura di Gianni Ciolli.

Notizie o annunci destinati a questo notiziario dovranno pervenire
entro la mezzanotte di domenica (le 15 nel fuso orario della
California). I comunicati in lingua italiana dovranno essere inviati a
pwn(at)itpug(dot)org; per le lingue inglese o tedesca, si scriva
rispettivamente a david(at)fetter(dot)org o a pwd(at)pgug(dot)de(dot)

== Patch applicate ==

Tom Lane ha effettuato i seguenti commit:

- Risolto un vecchio bug in contrib/sslinfo: X509_NAME_to_text
liberava troppo presto il buffer BIO_s_mem che stava usando.

In una situazione dove non si può fare pg_do_encoding_conversion,
questo causava la restituzione di dati inutilizzabili. Inoltre,
modificato in HEAD il codice che faceva la terminazione NULL in modo
da rendere un pochino più ovvio il procedimento.

- pg_do_encoding_conversion non può restituire NULL (a meno che
l'input sia NULL); sono stati quindi rimossi alcuni test inutili in
quel caso.

- In pgsql/src/backend/utils/adt/xml.c, risolti bugs di
sqlchar_to_unicode e unicode_to_sqlchar: ambedue usavano pg_mblen
per misurare la lunghezza di un carattere UTF8 (sbagliato, se la
codifica del database non è UTF8); inoltre unicode_to_sqlchar
assumeva semplicisticamente che un buffer statico venisse azzerato
ad ogni utilizzo.

- Aggiunto il supporto per input e output dei valori di tipo interval
con formattazione aderente allo standard ISO 8601; più precisamente,
in input è possibile usare il formato alternativo, oppure il formato
con "disegnatori", e in output si ottiene quest'ultimo formato
quando IntervalStyle è impostato a iso_8601. Ron Mayer.

- In pgsql/src/backend/utils/mb/mbutils.c, aggiunto un avviso
specifico in merito all'utilizzo di pg_do_encoding_conversion con
input non terminato da un NULL. In seguito alla discussione con
ITAGAKI Takahiro.

- Sistemata una omissione (per trascuratezza) di #include che adesso
sono necessari.

- Eliminato adjust_appendrel_attr_needed(), il quale non funzionava
più a partire da quando è stato esteso il meccanismo di appendrel
con l'aggiunta del supporto per l'ottimizzazione di UNION ALL.

Nessuno se n'era accorto, poiché il dato in attr_needed non viene
realmente usato per i nodi figli in appendrel; quindi ci è sembrato
più logico toglierlo invece di ripararlo. La correzione è stata
riportata sulla versione 8.2, poiché in certi casi speciali può
fallire un Assert. In seguito all'esame di un esempio da parte di
Jim Nasby. Nella HEAD sono stati inoltre eliminati i dati in
AppendRelInfo.col_mappings, inadeguati a rappresentare le situazioni
di tipo UNION ALL; meglio dipendere interamente da translated_vars.

- In pgsql/src/backend/optimizer/prep/prepjointree.c, assicurarsi che
i dati PlaceHolderVars che appaiono nella lista translated_vars di
una AppendRelInfo vengano aggiornati quando si prende un membro di
appendrel. Non è chiaro se ciò sia realmente importante, poiché con
gli output di una relazione figlia di appendrel al momento non si fa
molto; ma probabilmente se lasciamo i valori sbagliati prima o poi
saranno causa di problemi.

- Corretta la vecchia decisione di mostrare solo i centesimi di
secondo nello stile "postgres_verbose" per gli intervalli, e
corretta analogamente la decisione ugualmente arbitraria di mostrare
almeno i centesimi di secondo nella gran parte degli stili di
visualizzazione dei tipi datetime. Questo ha causato qualche piccolo
cambiamento nei test di regressione corrispondenti. Inoltre,
parecchio codice ripetitivo in datetime.c è stato unificato in
subroutines, per chiarezza e semplicità di manutenzione. In
particolare, così si è all'incirca dimezzato il numero di segmenti
di tipo #ifdef HAVE_INT64_TIMESTAMP. Ron Mayer, con qualche maneggio
aggiuntivo di Tom Lane.

- In pgsql/src/include/catalog/pg_proc.h, dato che abbiamo deciso di
usare una funzione SQL, per lo meno facciamolo "a rigor di schema".

- In pgsql/src/backend/optimizer/util/predtest.c, mettiamo un limite
al numero di rami che verranno processatti in clausole AND, OR o
equivalenti: se ce ne sono troppi (più di 100) allora esci senza
dimostrare alcunché. In questo modo non consumiamo un tempo O(N^2)
per tentare di effettuare dimostrazioni su liste molto lunghe o casi
analoghi. Inoltre, installate un paio di chiamate di tipo
CHECK_FOR_INTERRUPTS per essere sicuri che un tentativo di
dimostrazione troppo lungo possa essere interrotto. Preda catturata
da Sergey Konoplev. La correzione è stata riportata alla 8.2; alla
8.1 è stata riportata solo l'aggiunta di CHECK_FOR_INTERRUPTS,
poiché il resto della patch non si applica agevolmente, e comunque
questa versione non presenta quell'errore.

- In pgsql/src/backend/optimizer/util/predtest.c, implementata una
cache per i risultati della ricerca di un operatore di paragone di
dimostrazioni sui predicati inerenti i btree. Il risultato dipende
solo dai due operatori in input, e la direzione della dimostrazione
(implicazione o confutazione), quindi è facile installarvi una
cache. In questo modo si risparmia moltissimo tempo in casi come
quello evidenziato dall'esempio della lunga lista di NOT-IN,
segnalato da Sergey Konoplev, dove predtest dedica tutto il suo
tempo a stabilire più volte che la stessa coppia di operatori non
può essere usata in alcuna dimostrazione. (Ovviamente questo non
esclude una complessità asintotico O(N^2)). Non sono convinto che ci
siano grandi vantaggi quando constraint_exclusion è disattivato, ma
ad ogni modo si tratta di aggiungere poco codice, per cui potremmo
anche applicare la cache in tutti i casi.

- In pgsql/src/include/utils/pg_crc.h, le variabili globali menzionate
in pg_crc.h sono state PGDLLIMPORT-izzate. Credo che questo possa
risolvere il problema che attualmente affligge pg_trgm nella build
farm mingw.

- Prevenire le scansioni sincrone durante la costruzione degli indici
GIN, poiché GIN è ottimizzato per l'inserzione di tuple in ordine
crescente di TID. Non è chiaro se questa sia la causa soggiacente
alla segnalazione di Ivan Sergio Borgonovo, ma dei semplici test
confermano che una scansione che non inizia al blocco 0 può
rallentare la costruzione degli indici GIN di un fattore tre o
quattro. Correzione riportata alla versione 8.3; la scansione
sincrona non esisteva prima di tale versione.

- In pgsql/src/timezone/pgtz.c, e conseguentemente nella vista
pg_timezone_names, sono stati rimossi i fusi orari che tenevano
conto del "leap-second". Benché sia possibile usare tali fusi in
determinate circostanze, ad esempio AT TIME ZONE, essi sono vietati
in SET TIME ZONE, e il bug #4528 mostra che di fatto questi fusi
orari possono creare più confusione di quanti problemi possano
risolvere. Quindi li nascondiamo. (Nota: non li generiamo neanche
quando installiamo il nostro database di fusi orari. Ma può darsi
che siano presenti quando si usa un database fornito dal sistema.)

- In pgsql/doc/src/sgml/func.sgml, minime migliorie editoriali per la
documentazione della patch di array_agg.

- In pgsql/src/backend/utils/adt/array_userfuncs.c, piccole migliorie
alla chiarezza del codice nelle funzioni array_agg, e aggiunta di un
commento in merito a quanto questa soluzione interagisce agilmente
col sistema dei tipi.

- Implementata la forma più basilare di UNNEST, vale a dire
unnest(anyarray) che restituisce setof anyelement. Questa
implementazione non consente l'opzione WITH ORDINALITY, né l'opzione
di molteplici array in input, come dalle più recenti specifiche
SQL. Ma si tratta comunque di un sottoinsieme piuttosto utile delle
funzionalità descritte nelle specifiche, ed è sufficiente per
mandare in pensione contrib/intagg.

- Di fatto, invece di lamentarci di come l'implementazione dei tipi
potrebbe memorizzare un puntatore in modo insicuro, si farebbe
meglio a risolvere il problema. Ogni uso conosciuto di "internal" fa
riferimento di fatto a un puntatore.

- In pgsql/src/interfaces/ecpg/preproc/Makefile, migliorato un
commento su quando eliminare i files generati.

- In pgsql/src/backend/commands/conversioncmds.c, adesso CREATE
CONVERSION controlla che una presunta funzione di conversione tra
codifiche abbia valore di ritorno VOID. Questa è l'ultima delle
facili correzioni che io avevo raccomandato nel messaggio
11870(dot)1218838360(at)sss(dot)pgh(dot)pa(dot)us --- le altre sono state fatte molto
tempo fa, ma questa mi era sfuggita.

- Il file pgsql/src/interfaces/ecpg/preproc/preproc.y è adesso
generato automaticamente, quindi è stato tolto dal CVS.

- In CREATE AGGREGATE, il tipo di dato intermedio adesso può essere
"internal", ma solo se l'utente è superuser. Questo consente ai
moduli di estensione lo stesso trucco utilizzato da array_agg(). La
ragione per la restrizione a superuser è che un abuso potrebbe
causare un crash del sistema collegando tra di loro come aggregato
due funzioni che usano internal in modo incompatibile. Questa
restrizione non dovrebbe interferire con alcun utilizzo legittimo,
poiché ad ogni modo è necessario essere superuser per creare sia la
transizione che usa internal che le funzioni finali.

- Ridotto contrib/intagg a un semplice wrapper per la funzionalità
fornita dal core tramite le nuove funzioni array_agg() e unnest().
Avremmo potuto eliminarlo completamente, ma teniamolo per
compatibilità ancora per una release o due.

- In pgsql/src/include/utils/pg_crc.h, secondo tentativo per risolvere
il problema DLLIMPORT in pg_crc.h su Cygwin.

- In pgsql/src/bin/pg_resetxlog/pg_resetxlog.c, introdotta
un'ulteriore correzione per vedere se riusciamo a far partire di
nuovo la costruzione delle macchine cygwin. Così si prosegue nel
filone dei tentativi per far funzionare PGDLLIMPORT in pg_crc.h sia
in ambiente frontend che in backend.

- In pgsql/doc/src/sgml/libpq.sgml, documentato un "gotcha" che si
verifica su Windows usando il nuovo supporto per le event procedure
di libpq: ci si può confondere poiché le procedure esportate hanno
due diversi indirizzi. In seguito ad Andrew Chernow.

- Fatto funzionare SELECT FOR UPDATE/SHARE sugli alberi di
ereditarietà, facendo sì che il piano restituisca sia l'oid della
tabella che il ctid per ogni target di FOR UPDATE che ha tabelle
figlie. Le tabelle figlie sono tutte elencate nella lista
ExecRowMark, ma l'esecutore salta quelle che non hanno generato la
riga attuale. È curioso il fatto che questa restrizione (non certo
recente) sembra non sia mai stata documentata; quindi non abbiamo
dovuto cambiare la documentazione.

- In pgsql/src/interfaces/ecpg/preproc/Makefile, aggiunte le
dipendenze mancanti alla regola di build di preproc.y .

- Modificato UPDATE/DELETE WHERE CURRENT OF: se il cursore è stato
dichiarato con FOR UPDATE o FOR SHARE, allora viene utilizzata
l'infrastruttura di FOR UPDATE nell'individuare la riga oggetto
dell'UPDATE/DELETE. Questo approccio è più flessibile e affidabile
rispetto a una ricerca sull'albero del piano; ad esempio, permette
di gestire i cursori di join. Il codice vecchio è stato comunque
mantenuto per la gestione dei cursori non di tipo FOR-UPDATE. Su
segnalazione di Robert Haas.

Alvaro Herrera ha effettuato i seguenti commit:

- Aggiunto uno switch --locale a createdb, per semplificare la
creazione di database aventi diverse locali. Si tratta semplicemente
di una semplificazione della sintassi rispetto alle opzioni
--lc-collate e --lc-ctype. Dopo una discussione. In corso d'opera
sono state inoltre documentate adeguatamente le opzioni --lc-ctype e
--lc-collate nei documenti SGML, cosa che apparentemente era
sfuggita (di proposito?) in occasione del loro debutto.

- Corretto un caso di costruzione di stringa nella ricerca testuale.

- In pgsql/src/include/utils/pg_crc.h, aggiornata la URL dell'articolo
sul CRC di Ross Williams. Su segnalazione di Devrim GUNDUZ.

- Le tuple pg_attribute sono create adesso in modo regolare, usando
heap_form_tuple invece di heap_addheader. Dato che questo rimuove
l'ultima chiamata rimasta a heap_addheader, quest'ultima è stata
tolta. Modifica estratta dalla patch di Stephen Frost per
l'attribuzione di privilegi alle singole colonne, con ulteriore
riordino del codice da parte mia.

Heikki Linnakangas ha effettuato i seguenti commit:

- In pgsql/src/backend/utils/adt/formatting.c, aggiustato il parsing
dei caratteri del formato 'Q' nel nuovo codice to_timestamp(). Ha
provocato un crash.

- Cambiati i messaggi di errore, in modo da fargli visualizzare il
path fisico, tipo "base/11517/3767_fsm", invece dei nomi simbolici
come "1663/11517/3767/1", su suggerimento di Alvaro. I messaggi
nelle routine più di alto livello legate a indici, heap e FSM non
sono stati tuttavia cambiati, poiché ivi il fork è implicito.

- In pgsql/src/backend/postmaster/autovacuum.c, risolto un errore nel
dimensionamento della struttura shmem di autovacuum (si sbagliava di
uno). Poteva accadere infatti che un worker dell'autovacuum inviasse
un segnale SIGUSR1 al processo sbagliato. Report di Zou Yong.
Correzione riportata sulla versione 8.3.

- In pgsql/src/backend/storage/smgr/md.c, risolta una svista in una
patch precedente inerente i messaggi di errore; la stringa del path
non deve essere deallocata prima di passarla a elog.

Michael Meskes ha effettuato i seguenti commit:

- Rimpiazzato il preproc.y sincronizzato manualmente con quello creato
in automatico dal nuovo script. Adeguati di conseguenza i files dei
test di regressione.

- In pgsql/src/backend/parser/gram.y, non si usano più ICONST/SCONST
in regole diverse da Iconst/Sconst.

- In pgsql/src/backend/parser/gram.y, tolti due non-terminals:
- FloatOnly, usato solo da NumericOnly - adesso è prodotto da
NumericOnly;
- IntegerOnly, usato solo da NumericOnly e da una regola di ALTER
TABLE - il sostituto SignedIcost è già ampiamente utilizzato
altrove.

- Il file del parser è stato aggiornato a quello generato dall'ultima
versione di parse.[awk|pl] dalla versione più recente di gram.y.
Alcune piccole correzioni alla suite dei test.

- Aggiunto uno script pgsql/src/interfaces/ecpg/preproc/parse.pl che
genera preproc.y da gram.y nel CVS.

- Aggiunti dei files contenenti le modifiche tra gram.y e preproc.y.

- In ecpg, corretto un test per il caso output_filename == stdout.

- In ecpg, abilitato lo script per far generare preproc.y durante il
build.

Magnus Hagander ha effettuato i seguenti commit:

- In pgsql/src/bin/psql/command.c, adesso psql scrive "SSL connection
(unknown cipher)" se libpq ha impostato una connessione SSL ma psql
è compilato senza supporto SSL. Non è proprio un caso d'uso molto
realistico, ma la patch ha anche il pregio di ridurre gli #ifdef...

- In pgsql/doc/src/sgml/monitoring.sgml, si menziona la colonna
tup_fetched in pg_stat_database. Greg Sabino Mullane.

- Corretta in libpq la validazione del certificato per le connessioni
SSL. Aggiunto un parametro di configurazione "sslverify" per
controllare tale verifica. Il default è di fare una verifica
completa. Tolto del codice SSL antico che di fatto non ha mai
funzionato.

- In pgsql/src/tools/msvc/Mkvcbuild.pm, escluso contrib/intagg dalla
lista dei file di progetto MSVC che vengono generati, poiché adesso
è solo un modulo SQL senza codice C.

Andrew Dunstan ha effettuato i seguenti commit:

- Individuato un errore inerente l'incapacità di avere adeguate
informazioni di linkage per plperl, di solito a causa della mancanza
del modulo perl ExtUtils::Embed . Correzione riportata sulla
versione 8.1 e successive.

- In pgsql/src/interfaces/ecpg/preproc/ecpg.trailer, aggiunto un punto
e virgola mancante, su indicazione di Alex Hunsaker.

Peter Eisentraut ha effettuato i seguenti commit:

- La funzione array_length(), e per compatibilità con SQL anche il
caso speciale della funzione cardinality(). Questa versione ha
tuttora il comportamento sospetto di restituire null invece che zero
nel caso di un array vuoto, ma tale comportamento è ancora oggetto
di discussione e può darsi che venga rivisto. Jim Nasby, Robert
Haas, Peter Eisentraut

- In pgsql/doc/src/sgml/dblink.sgml, aggiunti elementi refentrytitle
alla refentry della pagina. La loro assenza creava dei problemi ai
tools per la gestione delle pagine di manuale.

- Tolti spazi inutili negli elementi refname, i quali confondevano i
tools per la gestione delle pagine di manuale.

- In pgsql/doc/src/sgml/Makefile, supporto per i links alle pagine di
manuale, nel caso in cui una pagina di manuale abbia più di un
refname. Questo caso non si verifica da nessuna parte, ma potrà
tornare utile in futuro per gestire SELECT/WITH/TABLE. Funziona sia
con il vecchio che con il nuovo target delle pagine di manuale (per
un opportuno valore di "funziona").

- In pgsql/doc/src/sgml/func.sgml, dato che la sezione xmlagg è stata
spostata, la parola "below" non è più corretta.

- Implementata la funzione di aggregato array_agg, come indica
SQL:2008, ma senza la clausola ORDER BY. La documentazione è stata
risistemata, adesso che array_agg e xmlagg hanno caratteristiche e
semantica simili. Il meglio di Robert Haas, Jeff Davis, Peter
Eisentraut

- Le pagine di manuale SQL sono adesso sezione 7 di default, e vengono
spostate in un'altra sezione solo se richiesto dalla piattaforma (il
modo vecchio era di crearle nella sezione "l" e poi trasformarle
nella sezione indicata dalla piattaforma). Questo velocizza
l'installazione nelle piattaforme più diffuse, ed evita alcune
bizzarrie con i tools delle pagine di manuale e il processo di
build.

- In pgsql/doc/src/Makefile, dato che doc/src/sgml costruisce la
documentazione HTML due volte per creare i riferimenti delle voci
dell'indice, non dobbiamo fare due distinti build.

- Risolto un crash dovuto a xmlconcat(NULL). Correzione riportata
sulla 8.3.

Teodor Sigaev ha effettuato i seguenti commit:

- Supporto delle codifiche multibyte per pg_trgm.

== Patches rifiutate (per adesso) ==

Nessuno è stato scontentato questa settimana :-)

== Patches in coda ==

KaiGai Kohei ha consegnato una nuova versione delle sue patch
SE-PostgreSQL.

ITAGAKI Takahiro ha consegnato una nuova versione del suo modulo
contrib auto-explain.

Hitoshi Harada ha consegnato due nuove revisioni della sua patch
per le funzioni di windowing.

Tom Lane ha consegnato una versione rivista della patch di Simon Riggs
che riduce alcuni lock DDL a ShareLock.

Hiroshi Saito ha consegnato una nuova versione della sua patch per il
locale.

Fujii Masao ha consegnato una nuova versione della sua patch per la
replica sincrona.

Alvaro Herrera ha consegnato una patch per aggiornare pg_filedump in
CVS HEAD.

Pavel Stehule ha consegnato una patch per aggiungere il supporto a
FOUND e GET DIAGNOSTICS al comando RETURN QUERY in PL/PgSQL.

Pavel Stehule ha consegnato una nuova versione delle sue patch
GROUPING SETS.

Teodor Sigaev ha consegnato una nuova versione della sua patch per
emulare gli indici B-tree tramite gli indici GIN, la quale adesso
gestisce un maggior numero di tipi di dato.

Magnus Hagander ha consegnato una nuova versione della sua patch per
implementare il supporto alle regexp nelle usermaps.

Heikki Linnakangas ha consegnato una nuova versione della sua patch
per la mappa di visibilità e il vacuum parziale.

ITAGAKI Takahiro ha consegnato una nuova versione della sua patch
pg_stat_statements.

Jeff Davis ha consegnato una nuova versione del modulo contrib
auto_explain.

Magnus Hagander e Alex Hunsaker hanno consegnato uno stormo di patch
che estendono e correggono l'implementazione SSL.

Browse pgsql-it-generale by date

  From Date Subject
Next Message Enrico Gabrielli 2008-11-23 19:40:00 Server postgresql/postgis per lavoro universitario
Previous Message maurizio.totti 2008-11-18 14:21:37 Re: ALTER SCHEMA ... SET TABLESPACE