Notiziario settimanale PostgreSQL – 2 novembre 2008


Notiziario settimanale PostgreSQL – 2 novembre 2008

(Traduzione in lingua italiana delle PostgreSQL Weekly News a cura di Gianni Ciolli gianni.ciolli@2ndquadrant.it)

Cittadini USA: non dimenticate di votare entro martedì. La democrazia o si usa o si perde.

La CommitFest finale per la versione 8.4 è iniziata ieri. Abbiamo più di 50 patch in coda, tra cui SEPostgres, column-level permissions, Hot Standby, Windowing Functions, SQL/MED, e molte altre. Abbiamo bisogno di reviewers! Se c’è una patch che ti interessa, provala al più presto e scrivi i risultati alla mailing list pgsql-hackers. Se non sai quale patch esaminare, ma hai tempo disponibile, allora iscriviti alla mailing list pgsql-rrreviewers, fai un cenno e ti assegneremo una patch.

Le patch che verranno respinte da questa CommitFest non faranno parte della versione 8.4, e dovranno aspettare fino al prossimo anno. Quindi non lasciare che questo accada per mancanza di review o di test.

CommitFest http://wiki.postgresql.org/wiki/CommitFest_2008-11

Come fare una review http://wiki.postgresql.org/wiki/Reviewing_a_Patch http://wiki.postgresql.org/wiki/RRReviewers

Mailing List http://archives.postgresql.org/pgsql-hackers/ http://archives.postgresql.org/pgsql-rrreviewers/

Log dell’incontro degli sviluppatori sul canale IRC #replicator: https://projects.commandprompt.com/public/replicator/wiki/developermeetinglogs

Nell’ultimo podcast di Ubuntu UK è presente un’intervista a Simon Riggs, rilasciata a Londra in occasione di LinuxLive. L’intervista Postgres inizia dopo circa 11 minuti. http://podcast.ubuntu-uk.org/2008/10/29/s01e17-talk-about-the-good-times/

Novità sul prodotto PostgreSQL

È stato rilasciato ora2pg 4.9 . http://pgfoundry.org/projects/ora2pg/

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 aiutare nell’organizzazione di un PgMeeting a Florianópolis. Scrivi a guediz AT gmail DOT com se puoi essergli d’aiuto.

Il prossimo 8 novembre David Fetter e Robert Treat parleranno al Perl Workshop che si terrà a Pechino. http://conference.perlchina.org/bjpw2008/schedule

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

Rassegna stampa su PostgreSQL

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

Questo notiziario settimanale PostgreSQL è stato realizzato da David Fetter e Josh Berkus; 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@itpug.org; per le lingue inglese o tedesca, si scriva rispettivamente a david@fetter.org o a pwd@pgug.de.

Patch applicate

Peter Eisentraut ha effettuato i seguenti commit:

  • In pgsql/src/backend/catalog/sql_features.txt, aggiornato l’elenco delle features.

  • Aggiunto EXPLAIN su CREATE TABLE AS.

  • Aggiunte le sintassi CURRENT_CATALOG, CURRENT_SCHEMA, SET CATALOG, SET SCHEMA da SQL:2008

  • Aggiunta la clausola WITH [NO] DATA al comando CREATE TABLE AS, in conformità a SQL. Inoltre, essendo WITH adesso una parola riservata, è stato semplificato il codice di gestione dei token in modo da ammettere solo WITH_TIME. In collaborazione con Tom Lane.

  • Unicode escapes in stringhe e identificatori.

  • Si usa la macro AS_HELP_STRING di Autoconf per formattare e allineare automaticamente le stringhe nell’output –help. Ciò viene realizzato tramite il nostro layer di astrazione, così da eliminare ridondanza e comportamenti casuali in configure.in.

  • A partire da SQL:2003, la specificazione della dimensione di un array nella sintassi SQL ARRAY è diventata opzionale.

  • In pgsql/src/backend/catalog/sql_features.txt, aggiornate le caratteristiche supportate.

  • Supporto per il compilatore Sun Studio su Linux. Di fatto si prende una parte del codice del sistema di build, originamente etichettata "Solaris", e la si attribuisce al compilatore invece che al sistema operativo. Julius Stroffek.

  • Ricollocato un commento dimenticato in contesto più adeguato.

  • In pgsql/src/bin/initdb/initdb.c, migliorato un messaggio

  • Mancava uno spazio in un messaggio di errore nello script configure di psql.

  • Aggiornamenti alla traduzione.

  • In pgsql/src/bin/initdb/initdb.c, migliorato un message (modifica riportata sulla 8.3)

  • In pgsql/doc/src/sgml/Makefile, la regola di conversione da postgres.sgml a postgres.xml non funziona con il sed di BSD, così è stata riscritta in Perl, linguaggio più portabile e tra l’altro un po’ più veloce. Utilizzavamo già Perl per la creazione della documentazione standard, quindi non abbiamo introdotto ulteriori requisiti.

Magnus Hagander ha effettuato i seguenti commit:

  • Aggiornati i makefiles di libpq per far funzionare msvc e bcc con il nuovo codice di gestione degli eventi di libpq. Hiroshi Saito.

  • Aggiunta la gestione di messaggi di errore multipli da libpq, semplicemente tramite la concatenazione di tali messaggi (questo li rende multi-linea poiché ciascuno di essi ha già il proprio newline). Prima accadeva che ogni nuovo errore sovrascrivesse il precedente; ad esempio, avendo impostato sslmode=prefer, un nuovo errore dovuto a un tentativo di connessione SSL veniva sovrascritto dall’errore relativo alla connessione non-SSL.

  • In pgsql/src/backend/libpq/hba.c, i messaggi di errori hba vengono analizzati in modo più specifico.

  • Rimosso il supporto per l’autenticazione crypt, troppo insicura; si interrompe così la compatibilità con le versioni precedenti alla 7.1.

  • In pgsql/src/backend/port/win32_shmem.c, si ritorna alla versione precedente del patch, ponendo il segmento di memoria condivisa su win32 nel namespace Global, poiché si sono verificati errori di permessi su molte piattaforme. Abbiamo bisogno di una soluzione migliore per la 8.4, ma per adesso torniamo alla situazione precedente alla versione 8.3.4.

Tom Lane ha effettuato i seguenti commit:

  • Installata una soluzione più robusta per un problema di ricorsione infinita in caso di errore nella conversione nella codifica del client di un messaggio di errore localizzato. Questo problema non è nuovo, ma – come segnalato da Ibrar Ahmed – il malfunzionamento era ancora presente nel caso di errori legati alla conversione dello stesso messaggio di errore di conversione :-(. La soluzione consiste nell’installazione di un "interruttore" che disabilita la localizzazione del messaggio nel caso in cui si verifichi questo problema. Preparate patch che hanno risolto il problema in tutte le versioni supportate, poiché di fatto tutte avevano questo difetto, benché in modo da riprodurre l’errore nel caso di test che stavo usando io abbia dovuto aggiungere alle versioni più vecchie alcune traduzioni mancanti.

  • Eliminato con lavoro certosino il MINIMAL_TUPLE_PADDING nella rappresentazione delle tuple nei file temporanei creati da tuplesort.c e tuplestore.c. Così si risparmiano 2 bytes per riga sulle macchine a 32 bit, e 6 bytes per riga sulle macchine a 64 bit; sembra quindi che ne valga la pena, anche rispetto alla maggiore complessità delle routine di lettura e scrittura delle tuple.

  • Modificato WorkTableScan per togliere il supporto alle scansioni all’indietro. Di fatto tale supporto non funziona, poiché nodeRecursiveunion.c crea un tuplestore privo della capacità di gestire scansioni all’indietro; tale decisione è inoltre saggia per ragioni di prestazioni. Potremmo eventualmente ipotizzare l’aggiunta di segnali da WorkTableScan a RecursiveUnion, per trasmettere una eventuale richiestas di scansione all’indietro… ma dal punto di vista pratico sarebbe uno spreco di energie, poiché non ci sono scenari attuali o in un futuro plausibile nei quali WorkTableScan sia utilizzata per effettuare scansioni all’indietro. Riassumendo, abbiamo di fatto eliminato il codice che millantava tale supporto.

  • Esteso ExecMakeFunctionResult() in modo da supportare una modalità alternativa per le funzioni set-returning (SRF), che contempla la restituzione di dati da parte della funzione tramite un tuplestore invece che con il metodo consueto "value-per-call". Alcune parti di codice sono state poi risistemate in modo da ridurre la conseguente duplicazione del codice con nodeFunctionscan.c.

Questa modifica è la parte sostanzialmente condivisa della patch, da me proposta, che modificava la modalità di restituzione dati per le funzioni SQL imponendo l’utilizzo di un tuplestore. Per il momento le funzioni SQL non utilizzano ancora la nuova modalità; però con questa modifica è adesso possibile che le SRF dei linguaggi procedurali siano chiamate in targetlists (si vedano a titolo di esempio le modifiche nei risultati dei test di regressione di plperl).

  • Adesso si usa maggior rigore nel consentire la creazione di tuplestores aventi randomAccess = true soltanto nei casi in cui una scansione all’indietro possa realmente accadere. In particolare, si trasmette un flag alle SRF materializzate per comunicare se hanno necessità o meno di richiedere accesso random. Durante tale trasmissione, si sopprime inoltre un inutile sovraccarico dovuto a scansionin all’indietro per il tuplestore holdStore di un Portal. Mia proposta sulla riduzione dei costi di I/O per i tuplestores.

  • In pgsql/src/backend/access/transam/xlog.c, correzione della logica di recoveryLastXTime in modo che il comportamento sia quello atteso. Preda catturata da Kevin Grittner. Correzione riportata sulla versione 8.3, in cui il bug era stato introdotto.

  • Aggiornati i file dei fusi orari in seguito alla versione 2008i di tzdata (modifiche alla legge sull’ora legale in Argentina, Brasile, Mauritius, Siria).

  • In pgsql/doc/src/sgml/release.sgml, aggiornate le note di rilascio delle versioni precedenti.

  • Si permette alle funzioni SQL di restituire l’output di INSERT/UPDATE/DELETE RETURNING, oltre a SELECT come già avveniva in precedenza. Un effetto collaterale di questa modifica è il miglioramento delle prestazioni nel caso in cui una funzione SRF SQL sia utilizzata in una clausola FROM: adesso l’output è raccolto in un tuplestore, mentre in precedenza si usava il meccanismo "value-per-call", meno efficiente.

  • Si semplifica la API di ExecutorRun, rendendola una funzione di tipo void, mentre precedentemente restituiva (talvolta) una TupleTableSlot; infatti tale comportamento non è più richiesto dalle funzioni SQL o in altra parte del codice. Così si risparmia una manciata di cicli, ma soprattutto si semplifica il lavoro delle funzioni hook di ExecutorRun che saranno supportate a partire dalla 8.4.

  • Sostituiti tutti gli utilizzi delle funzioni deprecate heap_formtuple, heap_modifytuple e heap_deformtuple con le nuove funzioni heap_form_tuple et alia (le quali fanno le stesse cose, ma usano flag di controllo di tipo booleano invece di valori arbitrari di tipo char). Eliminata di conseguenza la doppia implementazione, riducendo le funzioni deprecate a dei semplici wrappers intorno alle nuove funzioni; infatti non possiamo eliminare tout-court le funzioni deprecate, poiché qualche modulo aggiuntivo probabilmente le utilizza ancora. Kris Jurka.

  • Tolte le ultime vestigia del meccanismo MAKE_PTR/MAKE_OFFSET. Oramai da lungo tempo non veniva consentito a processi distinti di avere indirizzi distinti per il segmento shmem; tuttavia in alcune parti del codice era ancora utilizzata la vecchia convenzione. Ripulendo il codice è stata ridotta la confusione e si è agevolato il compilatore nell’individuare errori di tipo sui puntatori. Kris Jurka.

  • Modificata la logica di pgstat: prima il collettore di statistiche le scriveva sull’apposito file a intervalli fissi di 500ms, adesso invece ciò avviene su richiesta esplicita del backend, e comunque non prima di 500ms dall’ultima scrittura. Questa modifica dovrebbe produrre una riduzione significativa del traffico in scrittura sul file di statistiche in quegli scenari tipici nei quali le statistiche sono richieste di rado. Con questo approccio sono eliminate anche le difficoltà nel cambiare stats_temp_directory "al volo"; tale operazione non è più critica e non servono più particolari cautele o comportamenti frenetici (per minizzare l’eventualità di tali problemi). En passant, è stata anche corretta la funzione pgstat_report_stat() in modo da farle trasmettere statistiche nel caso in cui vi sono statistiche sulle chiamate di funzioni in assenza di statistiche su tabelle; questo corregge un bug nella recente patch che introduce le statistiche sulle chiamate di funzioni. Martin Pihlak.

Alvaro Herrera ha effettuato i seguenti commit:

  • In pgsql/src/backend/access/heap/heapam.c, non serviva codice aggiuntivo per il log nel caso in cui si congelino zero tuple, poiché le funzioni chiamanti hanno già controllato che il numero di tuple congelate non sia pari a zero.

  • In pgsql/src/backend/utils/time/snapmgr.c, la gestione di due errori è stata affidata a elog() invece che a ereport() trattandosi di errori del tipo "can’t happen".

Bruce Momjian ha effettuato i seguenti commit:

  • In pgsql/doc/src/sgml/syntax.sgml, tolto un tab dal file sgml.

Marc Fournier ha effettuato i seguenti commit:

  • Tag 8.3.5, 8.2.11, 8.1.15, 8.0.19, 7.4.23.

Heikki Linnakangas ha effettuato i seguenti commit:

  • Aggiunto il supporto per i cast di conversione I/O definiti dall’utente.

  • In pgsql/src/test/regress/parallel_schedule, aggiunto un caso di test per CREATE CAST.

  • Unificate le funzioni ReadBufferWithFork, ReadBufferWithStrategy e ZeroOrReadBuffer in un’unica funzione ReadBufferExtended, specificando strategia e modo come argomenti. Ci sono tre modi: RBM_NORMAL, il default usato da ReadBuffer(), RBM_ZERO, che rimpiazza ZeroOrReadBuffer, e un nuovo modo RBM_ZERO_ON_ERROR, che consente alle funzioni chiamanti di leggere le pagine corrotte senza generare un errore. Il FSM ha bisogno di questo nuovo modo per recuperare le pagine corrotte, cosa che potrebbe accadere se il server va in crash dopo l’estensione di un file FSM con la nuova pagina che rimane danneggiata. Aggiunto un numero di fork ad alcuni messaggi di errore in bufmgr.c che ne erano tuttora privi.

  • Aggiornato FSM nel replay WAL. Questa implementazione è un po’ limitata; il FSM è aggiornato solo per records WAL non corrispondenti all’immagine di una pagina intera, e – in modo assai arbitrario – solo se, dopo l’insert/update (non HOT) c’è meno del 20% di spazio libero nella pagina. Il limite del 20% dovrebbe evitare la gran parte del sovraccarico, ad esempio in occasione del replay di un inserimento in blocco, al contempo garantendo che le pagine piene siano contrassegnate come piene nel FSM. Questo serve quasi esclusivamente per evitare il dannoso scenario peggiore, quando il replay proviene da un archivio PITR e l’informazione FSM nel backup di base è molto disallineata: se ci fossero molte pagine ritenute erroneamente non piene dal FSM obsoleto, la prima (sfortunata) inserzione dopo il recovery dovrebbe percorrere tutte queste pagine per accorgersi che sono tutte piene. La vecchia implementazione di FSM non aveva questo problema poiché in caso di spegnimento non corretto le informazioni di tipo FSM venivano semplicemente scartate.

Michael Meskes ha effettuato i seguenti commit:

  • In pgsql/src/backend/parser/gram.y, aggiunto un ‘;’ mancante.

  • In ecpg, non viene consumata memoria neanche nel caso di un errore di tipo "memoria finita"

  • In ecpg, si usa la componente stringa nella struttura dell’indice.

  • In pgsql/src/interfaces/ecpg/ecpglib/misc.c, sostituita strcmp con strncmp per essere più tolleranti nei confronti di modifiche al parser.

Patches rifiutate (per adesso)

Nessuno è stato scontentato questa settimana :-)

Patches in coda

ITAGAKI Takahiro ha consegnato una nuova revisione del suo modulo contrib/pg_stat_statements.

Heikki Linnakangas ha proposto una patch WIP per la mappa di visibilità (dead space map).

Hitoshi Harada ha consegnato una nuova revisione della sua patch avente come oggetto OLAP e funzioni di Windowing.

Simon Riggs ha consegnato due nuove revisioni della sua patch Hot Standby.

Koichi Suzuki ha consegnato una patch per migliorare le prestazioni del PITR.

Kris Jurka ha consegnato due revisioni di una patch che effettua tutte le modifiche per usare la nuova API per le heaptuples.

Simon Riggs ha consegnato una patch all’infrastruttura di subcommit che usa il flag InRecovery per confinare un Assert a un insieme più ristretto di casi.

Emanuel CALVO FRANCO ha inviato una versione in lingua spagnola della FAQ Solaris.

Magnus Hagander ha consegnato una patch per implementare il supporto alle regexp nelle usermaps (pg_ident.conf).

Kris Jurka ha consegnato una patch per assimilare ai puntatori ordinari i puntatori alla memoria shared.

Martin Pihlak e ITAGAKI Takahiro hanno consegnato tre revisioni di una patch per pg_stat_statements.

Alvaro Herrera ha consegnato una patch per implementare controlli CRC a livello di blocco.

Ron Mayer ha consegnato tre revisioni di una patch per consentire a PostgreSQL di produrre in output intervalli standard SQL.

Stephen Frost ha consegnato tre revisioni di una patch per assegnare permessi a livello di colonne.

Teodor Sigaev ha consegnato un’altra revisione della sua patch per l’inserimento rapido per gli indici GIN.

Jonah Harris ha consegnato una patch che utilizza i filtri Bloom per velocizzare gli hash joins.

Hiroshi Saito ha consegnato una patch per correggere LC_TIME su Windows.

Simon Riggs ha consegnato una patch che implementa Hot Standby.

Hannu Krosing ha consegnato due revisioni di una patch per abilitare PL/Python alla restituzione di records basati su più parametri OUT.

Zdenek Kotala ha consegnato una patch per implementare l’upgrade in-place.

Teodor Sigaev ha consegnato una patch per emulare gli indici B-tree tramite gli indici GIN.

Hitoshi Harada ha consegnato un’altra revisione della sua patch per le Window Functions.

Peter Eisentraut ha consegnato due revisioni di una patch che implementa i "tipi distinti" secondo lo standard SQL.

Fujii Masao ha consegnato una patch che implementa la replicazione sincrona di tipo log-shipping.

Bernd Helmle ha consegnato una patch WIP per aggiornamenti VIEW automatici.

Gregory Stark ha consegnato una versione aggiornata della patch posx fadvise.

Zdenek Kotala ha consegnato una patch che aggiunge alle heaptuples delle informazioni legate alla versione.

Heikki Linnakangas ha consegnato una patch per migliorare le prestazioni di COPY FROM rimpiazzando CopyReadLineText with memchr().

David Fetter ha consegnato due revisioni di una patch pre-MED per esporre le clausole WHERE alle funzioni.

Andrew Dunstan ha consegnato un’altra patch WIP per il restore parallelo.

Zdenek Kotala ha consegnato due revisioni di una patch che ripulisce htup.h e bufpage.[ch].

Martin Pihlak ha consegnato due revisioni di una patch che implementa un gestore di connessioni compatibile con SQL/MED.

Jeff Davis ha consegnato un’altra revisione della sua patch per array_accum().

Robert Haas ha consegnato due revisioni della sua patch che migliora BufferAccessStrategy per gli inserimenti in blocco.

Nikhil Sontakke ha consegnato un’altra revisione della sua patch per l’auto-partizionamento.

Gianni Ciolli ha consegnato una patch per implementare gli indici bitmap.

Andrew Dunstan ha consegnato due revisioni di una patch che trasforma le UPDATEs superflue in no-ops.

Vladimir Sitnikov ha consegnato una patch per aggiungere le statistiche del buffer pool all’output di EXPLAIN ANALYZE.

KaiGai Kohei ha consegnato un’altra revisione delle sue patch SE-PostgreSQL.

This Post Has 0 Comments

Leave A Reply