Notiziario settimanale PostgreSQL – 16 novembre 2008

(Traduzione in lingua italiana delle PostgreSQL Weekly News a cura di Gianni Ciolli gianni.ciolli@2ndquadrant.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@itpug.org; per le lingue inglese o tedesca, si scriva rispettivamente a david@fetter.org o a pwd@pgug.de.

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.1218838360@sss.pgh.pa.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.

This Post Has 0 Comments

Leave A Reply