Notiziario settimanale PostgreSQL – 1 marzo 2009

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

Il PUG di Denver (USA) si incontrerà il 27 marzo. Prossimamente ulteriori dettagli.

Michael Renner terrà un workshop sulla replica con PostgreSQL a Netways OSDC 2009 in Norimberga, Germania. http://www.netways.de/english/osdc/y2009/programm/w/michael_renner_postgresql_repliziert_ein_ueberblick/

PostgreSQLFr avrà uno stand a Solutions Linux 2009, Parigi. Iscriviti tramite sas AT postgresql DOT fr oppure dal wiki in lingua francese: http://postgresql.fr/sl2009:start

Novità sul prodotto PostgreSQL

Rilasciata la versione 2.0.3 di Npgsql2, un provider di dati .NET per PostgreSQL. http://www.npgsql.org

Rilasciata la versione 2.2 di pgpool-II, connection pooler (e non solo), e di pgpoolAdmin, front-end grafico per pgpool-II. http://pgfoundry.org/projects/pgpool/

Rilasciato Simpycity, un sistema di mappatura per PostgreSQL. https://projects.commandprompt.com/public/simpycity/

La novità della settimana di PostgreSQL 8.4

pg_stat_statements. Questo modulo contrib realizzato da Itagaki Takahiro permette dei report sull’attività del vostro DB "á la pg_fouine", del tipo di "Le 25 query più popolari"; il tutto pressoché in tempo reale.

Il suggerimento della settimana

L’autovacuum dovrebbe essere attivato per la gran parte delle applicazioni del database, mentre dovrebbe essere invece spento in occasione di grandi caricamenti in blocco di dati, tipo ETL o il restore di un database.

Offerte di lavoro su PostgreSQL per marzo 2009

http://archives.postgresql.org/pgsql-jobs/2009-03/threads.php

Notizie locali su PostgreSQL

Il PostgreSQL User Group tedesco avrà uno stand, due talk e un workshop presso il Linuxdays Chemnitz, il 14 e 15 marzo 2009. Maggiori informazioni in lingua tedesca qui: http://andreas.scherbaum.la/blog/archives/525-PostgreSQL-auf-den-Chemnitzer-Linuxtagen.html

La PostgreSQL Conference U. S. organizzerà un PgDay nell’ambito della LinuxFest Northwest (25, 26 aprile). Informazioni su come proporre una comunicazione sono disponibili sul sito http://www.postgresqlconference.org/

Nei giorni 21 e 22 maggio 2009 all’università di Ottawa, in Canada, si terrà PGCon 2009. Nei due giorni precedenti si terranno dei tutorials. http://www.pgcon.org/2009/papers.php

Segnatevi la data: pgDay San Jose (USA). Domenica 19 luglio subito prima di OSCON. Saranno presto annunciate ulteriori informazioni! (incluso il call for papers)

Il 23 e 24 ottobre 2009 si svolgerà PGCon Brazil, presso Unicamp, nella città di Campinas, stato di San Paolo.

Rassegna stampa su PostgreSQL

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

Questo notiziario settimanale PostgreSQL è stato realizzato da David Fetter, Josh Berkus e Devrim GUNDUZ; traduzione in lingua italiana a cura di Gianni Ciolli e Gianluca Riccardi.

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

Heikki Linnakangas ha effettuato i seguenti commit:

  • Cambiato l’invio dei segnali di end-of-recovery. Il processo di startup ora indica il termine del recovery in uscita con codice di ritorno 0, come nei precedenti rilasci. Come da suggerimento di Tom.

  • In pgsql/src/backend/postmaster/postmaster.c, reinserito un "continue" che era andato perso nei cambiamenti all’avvio del bgwriter nel recovery WAL.

  • In pgsql/src/pl/plpgsql/src/pl_exec.c, per le variabili locali errm e sqlstate viene impostato isnull al momento del free; lasciare isnull impostato a true sembra essere inoffensivo, poiché in seguito esse sono fuori dallo scope di qualsiasi codice. Comunque sia, il debugger di PL/pgSQL non sembra tenere conto dello scope, producendo così un crash, come da report di Robert Walker (bug #4635). È inoltre bene essere ordinati per il debugging. Errore corretto nei rami 8.3, 8.2 e 8.1, CVS HEAD era stato corretto in precedenza. Analisi e risoluzione da Ashesh Vashi e Dave Page.

  • In pgsql/src/backend/commands/conversioncmds.c, in CREATE CONVERSION, controlla che la funzione data sia una funzione di conversione valida per le codifiche sorgente e destinazione. Tale controllo viene effettuato chiamando la funzione con una stringa vuota. Se la conversione richiesta non può essere eseguita, allora sarà prodotto un errore. Porting alle versioni 7.4 – 8.3. Come da segnalazione del bug #4680 da Denis Afonin.

Peter Eisentraut ha effettuato i seguenti commit:

  • In pgsql/src/pl/plpgsql/src/pl_exec.c, aggiunti apici al messaggio.

  • Aggiunta la possibilità di specificare una funzione esplicita di validazione per i wrappers a dati esterni (similmente ai linguaggi procedurali). In questo modo non è necessario conservare le librerie quasi vuote, e siamo più liberi nelle scelte sull’implementazione della API per i wrapper in futuro.

  • Non appendere epoch a log_filename in assenza di una specificazione di formato. Robert Haas

  • Classificato l’output di –help in modo quasi alfabetico, migliorato l’allineamento, resi gli help di pg_dump e pg_dumpall più simili.

  • Rimosse le chiamate a feof(stdin) in relazione alla richiesta di inserimento password, rimasugli dal tempo in cui la password veniva letta da stdin.

  • In pgsql/contrib/vacuumlo/vacuumlo.c, sistemato l’output dell’opzione di help (-?).

  • In pgsql/src/bin/pg_config/pg_config.c, usato lo stesso stile usato da altri programmi nella sinossi dello help.

  • Aggiunta l’opzione -w/–no-password, che evita ogni richiesta d’inserimento della password a tutti i programmi che hanno l’opzione -W/–password. Di passaggio, rimosse le antiche opzioni di compilazione PSQL_ALWAYS_GET_PASSWORDS.

  • Rimozione finale delle opzioni -q che erano state disattivate dalla versione 8.3 ed erano iscritte tra le cose rimuovere per la 8.4.

  • Risolte la dichiarazioni errone e inconsistenti sulla necessità o meno del valore dell’opzione in CREATE FOREIGN DATA WRAPPER/SERVER/USER MAPPING.

  • I programmi installati con contrib sono stati equipaggiati con opportune opzioni –help e –version, e l’output di help è stato impaginato normalmente.

  • In pgsql/src/bin/psql/help.c, aggiunte le opzioni lunghe al display di –help di psql, da cui curiosamente mancavano. Dal momento che così si toccano molte linee dell’output di help, l’accozzaglia di chiamate a puts e printf è stata cambiata ovunque in printf, per facilitare modifica e riesame del codice.

Tom Lane ha effettuato i seguenti commit:

  • In pgsql/src/bin/psql/describe.c, corretto il comando dD di psql al fine di mostrare una sola riga per dominio, anche quando il dominio ha più di un vincolo di tipo CHECK.

  • Riparato un vecchio bug in CLUSTER e le varianti di ALTER TABLE che usano la riscrittura: se il comando viene eseguito da qualcuno che non sia il proprietario della tabella (p.e. un superuser), e la tabella ha una tabella toast, allora la riga pg_type della tabella toast si ritrova con il typeowner sbagliato, i. e. chi ha eseguito il comando e non il proprietario della tabella. Si tratta di un errore pressoché inoffensivo per molti scopi, in quanto non ci sono controlli interessanti dei permessi che consultano la riga pg_type. Tuttavia, ciò potrebbe condurre a fallimenti inaspettati qualora si cercasse di effettuare il drop del ruolo che ha eseguito il comando (in 8.1 o 8.2), oppure potrebbe essere la causa di strani avvisi in seguito da parte di pg_dump (in 8.3 e successive, che consentiranno DROP ROLE perché non creiamo una dipendenza ridondante dal proprietario per i tipi di riga delle tabelle). Problema identificato da Cott Lang. Correzione riportata indietro fino alla versione 8.1. Il problema è in effetti più vecchio – la variante CLUSTER può esser dimostrata in 7.0 – ma è principalmente un problema di tipo cosmetico prima della 8.1, poiché allora non venivano tracciate le dipendenze riguardo all’identità del proprietario. In più, risolvere il problema prima della 8.1 richiederebbe una modifica della segnatura della funzione heap_create_with_catalog(), la quale comporterebbe un rischio non banale di incompatibilità coi moduli add-on.

  • Rimosso il tipo di nodo FlattenedSubLink, definito in modo piuttosto impreciso, in favore della costruzione, ad opera di pull_up_sublinks(), di una rappresentazione completa ad albero JoinExpr dei SubLinks IN/EXIST che sia convertibile in semi o anti join. Così si rende pull_up_sublinks() un po’ più complesso, ma il guadagno in chiarezza semantica giustifica la spesa. C’è ancora molto da fare in quest’area per risolvere i problemi discussi in precedenza, ma questo commit risolve in se almeno un bug in HEAD, come dimostrato dal caso di test di regressione aggiunto.

  • In pgsql/src/backend/utils/adt/ruleutils.c, risolto un vecchio problema nella decompilazione del costrutto CASE: il codice ruleutils.c cerca una CaseTestExpr per capire cosa ha fatto il parser, ma non riesce a considerare la possibilità che possa essere inserita una coercizione implicita sopra la CaseTestExpr. Ciò potrebbe risultare in un errore di Assert in alcuni casi (ma i risultati sarebbero comunque corretti se gli Assert sono disattivati), o un errore di tipo "unexpected CASE WHEN clause" nei casi rimanenti. Come da report di Alan Li. Patch riportata indietro alla 8.1; il problema non esiste prima perchè CASE era implementato diversamente.

  • Rimosso il file di paragone del test di regressione join_1.out non aggiornato. Era malfunzionante da più di un mese, perciò evidentemente non era necessario, almeno per nessuna delle configurazioni nella buildfarm. Possiamo correggerlo e rimpiazzarlo in seguito se troviamo casi in cui se ne abbia bisogno.

  • In pgsql/src/backend/optimizer/util/pathnode.c, migliorato create_unique_path al fine di non essere più imbrogliato da clausole che si trovano ad essere sintatticamente parte di una clausola semijoin pur non essendo legate a quest’ultima. Per esempio, dato WHERE EXISTS(SELECT … WHERE upper.var = lower.var AND some-condition) dove some-condition è solo una restrizione sulla relazione "lower", possiamo effettuare l’unificazione su lower.var dopo aver applicato some-condition nella scansione di lower.

  • Rese più restrittive le regole di join per tenere conto della recente analisi un po’ più accurata dell’associatività delle antijoin. Migliorata anche la discussione optimizer/README delle regole di ordinamento delle outer join.

  • In pgsql/src/backend/optimizer/prep/prepjointree.c, disabilitato temporaneamente (spero) l’appiattimento dei sublinks IN/EXISTS che sono nella clausola ON di una outer join. Ciò è semanticamente corretto, ma produce la de-ottimizzazione delle query che sono strutturate per avvantaggiarsi dello stile di esecuzione á la sublinks, come visto nella recente lamentela di Kevin Grittner. Dal momento che l’utente può ottenere l’altro comportamento tramite una riorganizzazione della propria query, l’appiattimento in automatico è solo una comodità che non giustifica il peggioramento delle applicazioni esistenti. Più in avanti sarebbe bello riabilitare questa funzionalità; tuttavia sembra che ciò richieda nell’esecutore un approccio significativamente differente alle outer join.

  • Ridotti i valori massimi di vacuum_cost_delay e autovacuum_vacuum_cost_delay a 100ms (da 1000). Questi valori sembrano ancora ampiamente maggiori dell’intervallo utile di questo parametro, e quindi dovrebbero aiutare nel dissuadere le persone dalla scelta di valori inutilmente grandi. Modificata la documentazione per raccomandare l’uso di valori piccoli. Come da discussione avvenuta un paio di settimane fa.

  • In pgsql/src/backend/optimizer/path/pathkeys.c, tolti un paio di cicli in compare_pathkeys() attraverso la verifica di liste di input aventi puntatori identici prima di scorrere le liste. Non si risparmia molto, ma il test dimostra che il caso in cui entrambi gli input sono NIL è sufficientemente comune da risparmiare qualcosa.

  • Corretta l’allocazione dei buffer nelle routines di conversione delle codifiche, in modo che non falliscano in caso di input di lunghezza zero. Non è un caso in uso normalmente perchè l’infrastruttura non chiama il convertitore per le stringhe vuote. Comunque, la patch di ieri ha creato un problema nel controllare se in CREATE CONVERSION viene fornita la giusta funzione di conversione. La correzione più valida guardando al futuro sembra sia di rendere i convertitori a prova di questo caso particolare.

Magnus Hagander ha effettuato i seguenti commit:

  • In pgsql/src/tools/msvc/Mkvcbuild.pm, rimossi i riferimenti alle librerie dei wrappers dei dati esterni, le quali sono state rimosse. Così il build msvc dovrebbe funzionare di nuovo.

Andrew Dunstan ha effettuato i seguenti commit:

  • In pgsql/src/backend/utils/adt/xml.c, nella funzione xpath(), evita di modificare irreversibilmente xml e xpath, a meno che xml non sia di fatto un documento formalmente corretto. In caso di tale modifica, fai un tentativo un po’ più salutare qualora l’espressione xpath non inizi con ‘/’.

Patch rifiutate (per adesso)

La patch di James Pye che modifica il comportamento di xpath per tenere conto dei frammenti. Richiesta una revisione poiché modifica una funzionalità in un modo che non si classifica come risoluzione di bug.

La patch di Sushint Sinhas per aggiungere lo spazio quando in tsearch2 si specifica FragmentDelimiter. Tale funzionalità è già disponibile con metodi meno invasivi.

La patch di Pavel Stehule per il supporto a parametri nominali e valori di default per le funzioni. Troppa ambiguità nell’interpretazione.

Patch in coda

KaiGai Kohei ha consegnato due ulteriori revisioni delle sue patch SE-PostgreSQL.

Alan Li ha consegnato una patch che corregge un errore di assertion nel backend, che può occorrere definendo una vista con CASE su una tabella.

Martin Pihlak ha consegnato una patch affinché i comandi d facciano considerare i dati nell’information schema come se fossero oggetti di sistema, rendendoli invisibili per default. Essi sono comunque visibili tramite i comandi d*S.

Damien Clochard ha consegnato una patch per psql che mostra le tabelle che ereditano una tabella data quando d viene eseguito su una tabella.

Heikki Linnakangas ha consegnato una patch WIP per Hot Standby che mostra come il tracciamento delle transazioni potrebbe funzionare usando solo le "unobserved xids," che al momento sono tutte le transazioni master.

Robert Lor ha consegnato una patch alla documentazione per le sonde DTrace recentemente aggiunte.

Dave Page ha consegnato una patch proveniente da Ashesh Vashi che risolve un bug di PL/PgSQL nella 8.3 (impostando state_var->value e errm_var->value a null, state_var->isnull e errm_var->isnull non erano impostate di conseguenza).

Peter Eisentraut ha consegnato una patch per aggiungere i codici di errore SQL:2008 ai valori LIMIT e OFFSET.

Peter Eisentraut ha consegnato una patch che impedisce a PostgreSQL di violare il limite di sistema sul numero massimo di files aperti.

This Post Has 0 Comments

Leave A Reply