<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>2ndQuadrant Italia</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/" />
    <link rel="self" type="application/atom+xml" href="http://blog.2ndquadrant.it/it/atom.xml" />
    <id>tag:blog.2ndquadrant.it,2008-11-08:/it//2</id>
    <updated>2010-07-06T21:44:52Z</updated>
    <subtitle>Il blog di 2ndQuadrant Italia. Informazioni su PostgreSQL e argomenti correlati</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Open Source 4.12</generator>

<entry>
    <title>Alcune idee su come raggruppare le risorse a basso livello in un server PostgreSQL</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2010/07/alcune-idee-su-come-raggruppar.html" />
    <id>tag:blog.2ndquadrant.it,2010:/it//2.93</id>

    <published>2010-07-06T21:35:43Z</published>
    <updated>2010-07-06T21:44:52Z</updated>

    <summary>Ho appena pubblicato sul blog centrale di 2ndQuadrant delle osservazioni tecniche maturate nell&apos;ambito della conferenza CHAR(10)....</summary>
    <author>
        <name>Gianni Ciolli</name>
        <uri>http://www.2ndquadrant.it</uri>
    </author>
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="raggrupparelerisorseabassolivelloinpostgresql" label="Raggruppare le risorse a basso livello in PostgreSQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>Ho appena pubblicato sul blog centrale di 2ndQuadrant <a href="http://blog.2ndquadrant.com/en/2010/07/some-ideas-about-lowlevel-reso.html">delle osservazioni tecniche</a> maturate nell'ambito della conferenza <a href="http://www.char10.org">CHAR(10)</a>.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>PostgreSQL 9.0 Beta 2 è adesso disponibile</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2010/06/postgresql-9-0-beta-2.html" />
    <id>tag:blog.2ndquadrant.it,2010:/it//2.90</id>

    <published>2010-06-06T22:00:01Z</published>
    <updated>2010-06-07T12:46:03Z</updated>

    <summary>La seconda beta release di PostgreSQL 9.0 è adesso disponibile. Questa versione contiene diverse correzioni e molte modifiche rispetto alla versione Beta1. Sei pregato di scaricare, installare e provare PostgreSQL 9.0beta2 in modo da accelerare il rilascio della versione 9.0....</summary>
    <author>
        <name>Gabriele Bartolini</name>
        <uri>http://www.2ndQuadrant.it/</uri>
    </author>
    
        <category term="Comunità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Novità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="postgresql90beta2" label="PostgreSQL 9.0 beta 2" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>La seconda beta release di PostgreSQL 9.0 è adesso disponibile. Questa versione contiene diverse correzioni e molte modifiche rispetto alla versione Beta1. Sei pregato di scaricare, installare e provare PostgreSQL 9.0beta2 in modo da accelerare il rilascio della versione 9.0.</p>
]]>
        <![CDATA[<p>Alcuni cambiamenti significativi sono stati introdotti nella versione Beta2, che richiederà ad alcune applicazioni di eseguire di nuovo il test per la 9.0. Questi includono:</p>

<ul><li>Correzioni per questioni di sicurezza, come nell'annuncio del 17 maggio scorso</li><li>Modifiche alla sintassi per parametri nominali</li><li>aggiunta di <code>pg_upgrade</code> ai moduli addizionali (<code>contrib</code>)</li><li>Modifiche a parametri e opzioni nel file <code>recovery.conf</code></li><li>diverse correzioni in seguito a segnalazioni riportati con la versione Beta1</li></ul>

<p>E' da notare che, in seguito a una modifica nel catalogo di sistema, è necessario effettuare di nuovo <code>initdb</code> e ricaricare i database in caso di aggiornamento dalla versione Beta1. Cogliamo l'occasione per incoraggiare gli utenti a sfruttare questa opportunità per testare il funzionamento di <code>pg_upgrade</code> per l'aggiornamento dalla Beta1 o da una versione precedente alla 9.0. Vi preghiamo di riportare i risultati ottenuti.</p>

<p>Se sei in grado di aiutare nella fase di <strong>beta testing</strong>, sei pregato di visitare la <a href="http://wiki.postgresql.org/wiki/HowToBetaTest">pagina con le istruzioni sul Beta testing di PostreSQL</a>.</p>

<p>Le versioni beta non sono stabili per natura e non dovrebbero mai essere utilizzate in ambienti di produzione; sono esclusivamente ad uso di test. Altre versioni beta oppure una versione di tipo "release candidate" saranno disponibili fra alcune settimane.</p>

<p>Il codice sorgente, insieme a <em>installer</em> binari per diverse piattaforme, sono a disposizione dal sito di PostgreSQL:</p>

<ul><li><a href="http://www.postgresql.org/ftp/source/v9.0beta2">Sorgente</a></li><li><a href="http://www.enterprisedb.com/products/pgdownload.do">One-Click Installer, comprendente binari Win64</a></li><li><a href="http://www.postgresql.org/ftp/binary/v9.0beta2">Binari per altre piattaforme</a></li><li><a href="http://developer.postgresql.org/pgdocs/postgres/release-9-0.html">Release Note</a></li><li><a href="http://www.postgresql.org/developer/beta">Partecipare alla fase di test</a></li></ul>
]]>
    </content>
</entry>

<entry>
    <title>Corsi su HA e scalabilità con PostgreSQL: Riggs e Krosing sbarcano in Italia</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2010/04/corsi-su-ha-e-scalabilita-con.html" />
    <id>tag:blog.2ndquadrant.it,2010:/it//2.84</id>

    <published>2010-04-14T08:25:42Z</published>
    <updated>2010-04-15T15:19:31Z</updated>

    <summary>Giovedì 6 e venerdì 7 maggio 2010, in occasione di Pycon 4, 2ndQuadrant terrà a Firenze una due giorni di corsi letteralmente ECCEZIONALE. Simon Riggs condurrà un workshop di due giornate sulle novità di PostgreSQL 9.0 in termini di HA...</summary>
    <author>
        <name>Simone Martelli</name>
        
    </author>
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="altaaffidabilità" label="alta affidabilità" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="evento" label="evento" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="postgresql" label="PostgreSQL" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pycon2010" label="pycon 2010" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="replica" label="replica" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="scalabilità" label="scalabilità" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="workshop" label="workshop" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p><strong>Giovedì 6 e venerdì 7 maggio 2010</strong>, in occasione di <a href="http://www.pycon.it/">Pycon 4</a>, 2ndQuadrant terrà a Firenze una due giorni di corsi letteralmente <strong>ECCEZIONALE</strong>.</p>

<p><strong>Simon Riggs</strong> condurrà un workshop di due giornate sulle novità di <em>PostgreSQL 9.0 in termini di HA (high availability) e replica</em>, concentrandosi in particolare su Hot Standby e Streaming Replication. 
Sarà un'occasione imperdibile per scoprire le caratteristiche e carpire i segreti direttamente dal principale sviluppatore di queste funzionalità. Per maggiori dettagli: 
<a href="http://www.2ndquadrant.it/formazione-postgresql/corso/81">http://www.2ndquadrant.it/formazione-postgresql/corso/81</a></p>

<p>In contemporanea, <strong>Hannu Krosing</strong> terrà due giornate di <em>workshop su come ottenere scalabilità infinita con PostgreSQL</em>, utilizzando Skytools, gli strumenti open-source sviluppati ed utilizzati da Skype per la gestione dei loro database (rigorosamente in PostgreSQL). Il corso si svolge per la prima volta in Italia. 
Maggiori informazioni: <a href="http://www.2ndquadrant.it/formazione-postgresql/corso/82">http://www.2ndquadrant.it/formazione-postgresql/corso/82</a></p>

<p><strong>I RELATORI</strong></p>

<p><strong>Simon Riggs</strong> è Major Developer di PostgreSQL ed è considerato uno dei massimi esperti di HA, replica e recovery all'interno della comunità di PostgreSQL.</p>

<p><strong>Hannu Krosing</strong>, già database architect di Skype, è stato l'ideatore degli <a href="https://developer.skype.com/SkypeGarage/DbProjects/SkyTools">Skytools</a> che hanno permesso a Skype di ottenere scalabilità infinita con PostgreSQL. 
E' considerato uno dei massimi esperti di scalabilità all'interno della comunità di PostgreSQL.
Per maggiori informazioni: <a href="http://www.2ndquadrant.it/chi-siamo/">http://www.2ndquadrant.it/chi-siamo/</a></p>

<p><strong>PROMOZIONE</strong></p>

<p>Per tutti coloro che si iscriveranno entro il 23 aprile prossimo sarà previsto uno sconto del 10%.</p>

<p><strong>Siete già registrati al Pycon?</strong> Contattateci per conoscere l'offerta che 2ndQuadrant ha riservato per voi! </p>
]]>
        

    </content>
</entry>

<entry>
    <title>2ndQuadrant parteciperà a &quot;Pycon Italia Qu4ttro&quot;</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2010/04/2ndquadrant-pycon-2010.html" />
    <id>tag:blog.2ndquadrant.it,2010:/it//2.83</id>

    <published>2010-04-02T13:22:34Z</published>
    <updated>2010-04-02T13:54:57Z</updated>

    <summary>2ndQuadrant Italia parteciperà a &quot;PyCon Italia Qu4ttro&quot;, la quarta edizione della conferenza Italiana sul linguaggio di programmazione Python, uno dei più importanti eventi del genere in Europa. PyCon si svolgerà a Firenze nei giorni 7, 8 e 9 maggio 2010...</summary>
    <author>
        <name>Gabriele Bartolini</name>
        <uri>http://www.2ndQuadrant.it/</uri>
    </author>
    
        <category term="Comunità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Novità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="pycon" label="PyCon" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>2ndQuadrant Italia parteciperà a "<a href="http://www.pycon.it/"><strong>PyCon Italia Qu4ttro</strong></a>", la quarta edizione della conferenza Italiana sul linguaggio di programmazione Python, uno dei più importanti eventi del genere in Europa.
PyCon si svolgerà a Firenze nei giorni 7, 8 e 9 maggio 2010 e nel capoluogo toscano sono attesi più di 400 visitatori fra aziende, professionisti e appassionati del linguaggio.</p>
]]>
        <![CDATA[<p>Python è uno dei linguaggi più utilizzati dai professionisti PostgreSQL, sia per la scrittura di applicazioni esterne che per procedure interne al database in PL/Python. Al tempo stesso, PostgreSQL è uno dei database preferiti dagli sviluppatori Python. Entrambi sono fra i più avanzati progetti nel campo dell'open-source.</p>

<p><strong>Simon Riggs</strong> (fondatore di 2ndQuadrant e sviluppatore di PostgreSQL) e <strong>Hannu Krosing</strong> (2ndQuadrant Estonia ed ex <em>database architect</em> di Skype), interverranno alla conferenza con due talk su PostgreSQL e Python.</p>

<p>Coloro interessati a PostgreSQL 9.0, la cui uscita è attesa per questa estate, avranno l'occasione di chiedere direttamente a Simon Riggs informazioni su <strong>Hot Standby</strong>, la principale novità della prossima release. Grazie a Hot Standby, <em>Postgres</em> avrà finalmente il supporto nativo alla replica master/slave, una funzionalità fondamentale per l'alta disponibilità (HA) e le performance in campo Business Intelligence.</p>

<p>Maggiori informazioni sul <a href="http://www.pycon.it/pycon4/programma">programma di Pycon</a> e sulle modalità di iscrizione sono reperibili sul sito dell'evento <a href="http://www.pycon.it/">http://www.pycon.it/</a>.</p>
]]>
    </content>
</entry>

<entry>
    <title>Pillola: quali sono le tabelle master nel mio database?</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2010/03/quali-sono-le-tabelle-master.html" />
    <id>tag:blog.2ndquadrant.it,2010:/it//2.81</id>

    <published>2010-03-23T17:05:56Z</published>
    <updated>2010-03-23T17:09:46Z</updated>

    <summary>A volte può essere necessario interrogare il catalogo per scoprire quali sono le tabelle master in un particolare database PostgreSQL. L&apos;ereditarietà in PostgreSQL consente di creare relazioni di tipo IS molto simile ai concetti tipici dell&apos;OO riguardanti le classi. La...</summary>
    <author>
        <name>Gabriele Bartolini</name>
        <uri>http://www.2ndQuadrant.it/</uri>
    </author>
    
        <category term="Amministrazione" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Comunità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="tabellemaster" label="Tabelle master" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>A volte può essere necessario interrogare il catalogo per scoprire quali sono le tabelle master in un particolare database PostgreSQL.</p>

<p>L'ereditarietà in PostgreSQL consente di creare <strong>relazioni di tipo IS</strong> molto simile ai concetti tipici dell'OO riguardanti le classi. La tecnica è particolarmente usata per il partizionamento.</p> 
]]>
        <![CDATA[<p>Una volta collegati a PostgreSQL, è sufficiente digitare la seguente query SQL:</p>

<pre><code>
SELECT DISTINCT relname FROM pg_inherits JOIN pg_class ON (oid = inhparent);
</code></pre>

<p>Espandendo la query, possiamo anche contare quante tabelle derivano dalla master, ordinandole per nome:</p>

<pre><code>
SELECT relname, count(*) FROM pg_inherits JOIN pg_class ON (oid = inhparent) GROUP BY 1 ORDER BY 1;
</code></pre>

<p>Buon divertimento!</p>
]]>
    </content>
</entry>

<entry>
    <title>Corsi PostgreSQL PostGIS</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2010/02/corsi-postgresql-postgis.html" />
    <id>tag:blog.2ndquadrant.it,2010:/it//2.76</id>

    <published>2010-02-01T17:13:08Z</published>
    <updated>2010-02-02T16:15:53Z</updated>

    <summary>Dal 22 al 26 febbraio prossimi si terrà a Prato una sessione completa di tre corsi distinti, volta ad accompagnare gli iscritti dal linguaggio SQL fino all&apos;uso reale di PostgreSQL e PostGIS....</summary>
    <author>
        <name>Simone Martelli</name>
        
    </author>
    
        <category term="Comunità" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="corso" label="corso" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="postgis" label="PostGIS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="postgresql" label="PostgreSQL" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sql" label="SQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>Dal <strong>22</strong> al <strong>26 febbraio</strong> prossimi si terrà a <strong>Prato</strong> una sessione completa di tre corsi distinti, volta ad accompagnare gli iscritti dal <strong>linguaggio SQL</strong> fino all'uso reale di <strong>PostgreSQL</strong> e <strong>PostGIS</strong>.</p>
]]>
        <![CDATA[<p>L'estensione PostGIS trasforma PostgreSQL in un database geografico o "geodatabase", grazie al supporto per la memorizzazione di oggetti GIS secondo gli standard definiti da OpenGeospatial Consortium (OGC - <a href="http://www.opengeospatial.org/">http://www.opengeospatial.org/</a>). 
L'alto grado di integrazione di PostgreSQL con front-end grafici come QuantumGIS e applicazioni web come MapServer, rende inoltre l'accoppiata "PostgreSQL + PostGIS" una soluzione open-source molto appetibile per l'attività di analisi geografica e cartografica. Un'offerta in grado di sostituire soluzioni software proprietarie ed in grado di abbattere il <strong>Total Cost of Ownership</strong> (TCO).</p>

<p>Questa full immersion di 5 giorni permette di poter utilizzare tutte le potenzialità della soluzione "PostgreSQL-PostGIS" sfruttando il linguaggio SQL e le competenze relative all'amministrazione di database PostgreSQL:</p>

<ul>
<li><a href="http://www.2ndquadrant.it/formazione-postgresql/corso/48">Workshop "SQL pratico"</a>, dal 22 febbraio al 23 febbraio</li>
<li><a href="http://www.2ndquadrant.it/formazione-postgresql/corso/49">Workshop "Amministrazione di Database PostgreSQL"</a>, dal 24 febbraio al 25 febbraio</li>
<li><a href="http://www.2ndquadrant.it/formazione-postgresql/corso/57">Tutorial "PostGIS"</a>, 26 febbraio</li>
</ul>

<p>il tutorial su PostGIS è organizzato in collaborazione con <a href="http://www.faunalia.it/">Faunalia</a>.</p>

<p>Nel caso si voglia frequentare tutti e tre i corsi, verrà effettuato il 10% di sconto sull'importo totale.</p>

<p>Sarà ovviamente possibile partecipare anche ad un solo corso.</p>
]]>
    </content>
</entry>

<entry>
    <title>PostgreSQL alternativa a MySQL: una precisazione</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2010/01/postgresql-alternativa-a-mysql.html" />
    <id>tag:blog.2ndquadrant.it,2010:/it//2.74</id>

    <published>2010-01-22T11:54:06Z</published>
    <updated>2010-01-22T12:25:29Z</updated>

    <summary>Vorrei cogliere l&apos;occasione per commentare l&apos;articolo apparso ieri su Punto Informatico intitolato &quot;UE: Sun e Oracle, promosse&quot;. In questi giorni, vista l&apos;approvazione dell&apos;acquisizione di Sun - e conseguentemente - da parte di Oracle ad opera della commissione Europea, il nome...</summary>
    <author>
        <name>Gabriele Bartolini</name>
        <uri>http://www.2ndQuadrant.it/</uri>
    </author>
    
        <category term="Comunità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="MySQL" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Novità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="postgresqleilfuturodimysql" label="PostgreSQL e il futuro di MySQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>Vorrei cogliere l'occasione per commentare l'<a href="http://punto-informatico.it/2791972/PI/News/ue-sun-oracle-promosse.aspx">articolo apparso ieri su Punto Informatico intitolato "UE: Sun e Oracle, promosse"</a>.
In questi giorni, vista l'approvazione dell'acquisizione di Sun - e conseguentemente - da parte di Oracle ad opera della commissione Europea, il nome di PostgreSQL è stato più volte tirato in ballo.</p>
]]>
        <![CDATA[<p>In particolare, volevo fare una precisazione circa la <a href="http://www.newsfactor.com/story.xhtml?story_id=112003NN5V4G&amp;full_skip=1">dichiarazione pubblicata da
Punto Informatico da parte di Florian Mueller</a>, che in inglese (fonte News Factor) recita:</p>

<p><em>"The EC's reasoning has to be reviewed when all the details of the decision are known, but based on the EC's press release, it seems to be a decision based on wishful thinking for the future more so than anything else. PostgreSQL has been around for decades without having had its mainstream breakthrough, so the EC can't seriously claim that PostgreSQL could replace MySQL as a competitive force."</em></p>

<p>Non voglio entrare nel merito dell'interpretazione della prima frase (personalmente trovo la traduzione non proprio calzante), mentre mi sembrano doverose alcune precisazioni sul secondo punto. <strong>Non credo che la validità di un progetto debba essere giudicata esclusivamente dalla diffusione di massa</strong>. Da alcuni anni partecipo alle varie attività della comunità PostgreSQL, ma in passato ho lavorato per diversi anni anche con MySQL.</p>

<p>Brevemente, PostgreSQL è un progetto open-source distribuito in BSD  nato formalmente nel 1996 con l'aggiunta del supporto SQL a Postgres, i cui predecessori (Postgres e Postgres95) risalgono ai progetti sviluppati a partire dal decennio precedente all'Università della California a Berkeley. È quindi nel 1996 che la comunità di PostgreSQL vera e propria è nata. Vorrei enfatizzare il concetto di "<strong>comunità</strong>", perché PostgreSQL, a differenza di MySQL, è sempre stato un <strong>progetto di comunità</strong>. E' la comunità che detiene il codice sorgente di PostgreSQL e che, in virtù della licenza permissiva BSD, non potrà mai essere detenuto da una singola azienda.</p>

<p>Ritornando alla diffusione di MySQL, è ragionevole pensare che un'azienda come MySQL abbia sempre investito nel marketing. E' altrettanto ragionevole pensare che il marketing promosso da una azienda con personale qualificato nel settore sia più efficace del marketing promosso da una comunità di sviluppatori, per giunta composta da membri provenienti da tutti i continenti.</p>

<p>Esiste poi indubbiamente una spiegazione tecnica al vantaggio in termini di "diffusione di massa" raggiunto da MySQL negli anni, soprattutto quelli a cavallo del millennio con l'uscita della release 3.23. La forte sinergia con il linguaggio che cambiò il modo di fare applicazioni web dinamiche di massa in quegli anni, ovvero PHP. Lo stack Linux + Apache + MySQL + PHP (LAMP) ha contribuito in modo importante alla diffusione di MySQL.</p>

<p>PostgreSQL in quegli anni (e si parla della release 6.5) aveva da poco introdotto il <strong>modello MVCC (multi-version concurrency control)</strong> per la gestione delle transazioni ed il team di sviluppo si stava concentrando sul rendere PostgreSQL affidabile e conforme allo standard SQL, piuttosto che sulle sue capacità prestazionali.</p>

<p>Da qui il "mito" della lentezza di PostgreSQL nei confronti di MySQL, che in quel periodo era innegabile, vista anche la diversità dei due prodotti.</p>

<p>Ma di "acqua sotto i ponti" ne è passata da allora, ed entrambi i database si sono evoluti a 360 gradi - seppure con percorsi diversi. Inoltre, il fatto che PostgreSQL sia un progetto di comunità, non significa che non ci siano aziende dietro che lo utilizzano (ad oggi 
parliamo di stime di circa 5 milioni di download all'anno di Postgres), che ne supportano lo sviluppo e al contempo forniscono servizi professionali di assistenza.</p>

<p>Chi sa quale sia il migliore? Il mio punto di vista è che, come in tutti i casi, a priori non esiste un database migliore degli altri e tutti i dibattiti "PostgreSQL vs MySQL", "Oracle vs MySQL", etc. finiscono per lasciare il tempo che trovano. Senza le dovute conoscenze 
e soprattutto senza una profonda analisi dei requisiti e delle esigenze di un certo problema, non è possibile dare risposte definitive e certe.</p>

<p>La cosa che mi ferisce è che il futuro di MySQL presenti purtroppo molte incertezze. Credo che, se anche Oracle dichiarasse di continuare a svilupparlo in open-source, la ricezione da parte della comunità non potrà mai essere positiva. Il fork open-source c'è già (MariaDB) e le intenzioni di Widenius sono oramai note a tutti. Tuttavia, è un progetto 
che - a livello di comunità - deve nascere da zero, e la cosa non sarà semplice.</p>

<p>Ad ogni modo, non è questa la sede adatta per parlare di PostgreSQL, MySQL e il mercato database in modo serio e approfondito. La comunità di PostgreSQL rappresentata in Italia dall'<a href="http://www.itpug.org/">associazione culturale Italian PostgreSQL Users Group</a>, che annualmente organizza l'<a href="http://www.itpug.org/">evento nazionale PostgreSQL Day</a>, sarebbe molto felice di affrontare questi argomenti in modo aperto, obiettivo e serio nelle giuste sedi.</p>

<p>Cordiali saluti,</p>

<p>Gabriele Bartolini</p>

<p>Presidente Italian PostgreSQL Users Group</p>
]]>
    </content>
</entry>

<entry>
    <title>Postgres, il futuro open-source di MySQL?</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2010/01/postgres-futuro-open-mysql.html" />
    <id>tag:blog.2ndquadrant.it,2010:/it//2.73</id>

    <published>2010-01-17T11:02:28Z</published>
    <updated>2010-01-17T11:42:50Z</updated>

    <summary>Qualche giorno fa leggevo con estremo interesse l&apos;intervista fatta da Punto Informatico a Michael Widenius, il creatore di MySQL. Dall&apos;intervista appare evidente la preoccupazione di &quot;Monty&quot; (il soprannome di Widenius) per l&apos;acquisizione di Sun da parte di Oracle - oramai...</summary>
    <author>
        <name>Gabriele Bartolini</name>
        <uri>http://www.2ndQuadrant.it/</uri>
    </author>
    
        <category term="Novità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ilfuturodimysql" label="il futuro di MySQL" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="postgresql" label="PostgreSQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>Qualche giorno fa leggevo con estremo interesse l'<a href="http://punto-informatico.it/2777880/PI/Interviste/widenius-salviamo-mysql.aspx">intervista fatta da Punto Informatico a Michael Widenius, il creatore di MySQL</a>.</p>

<p>Dall'intervista appare evidente la preoccupazione di "<em>Monty</em>" (il soprannome di Widenius) per l'acquisizione di Sun da parte di Oracle - oramai imminente, nonostante il rinvio della Commissione Europea. Occorre precisare che proprio due anni fa Widenius stesso aveva ceduto la sua azienda a Sun.
E' circa un'anno inoltre che Widenius ha lasciato Sun ed ha fondato una nuova azienda in Finlandia con l'obiettivo di continuare lo sviluppo open-source di MySQL, creando un <em>fork comunitario</em> dello stesso database e chiamandolo <strong>MariaDB</strong> (in omaggio alla sua figlia più piccola, Maria).</p>
]]>
        <![CDATA[<p>Uno dei punti maggiormente interessanti dell'intervista riguarda le conseguenze sul mercato e sul mondo degli utilizzatori FOSS di questa operazione di acquisizione da parte di Oracle. Secondo Widenius, "<em>siccome nessuno vuole usare un "prodotto moribondo", il mondo FOSS cercherà alternative. Le uniche percorribili ora sono MariaDB, il ramo di MySQL su cui lavoro assieme alla comunità, o PostgreSQL</em>".</p>

<p>Tuttavia, come più tardi nell'intervista confermerà lo stesso Monty, il progetto MariaDB non sembra ancora decollato, così come ogni tentativo passato di creare un fork GPL di MySQL. Se anche MariaDB dovesse fallire, l'utenza di MySQL dovrà "<em>dovrà passare a PostgreSQL o comprare licenze commerciali da Oracle</em>".</p>

<p>Inoltre, una delle soluzioni proposte da Monty per la sopravvivenza di MySQL è quella di obbligare Oracle a rilasciare MySQL con la licenza BSD (tra l'altro quella che ha decretato il successo del progetto PostgreSQL).</p>

<p><strong>Può l'utenza di MySQL permettersi questa insicurezza?</strong></p>

<p>In questo periodo di confusione su MySQL e sul futuro dei database open-source, una delle notizie più liete è sicuramente rappresentata dalla costante crescita di PostgreSQL.
E chiudo con un interrogativo: <strong>se oggi un manager IT dovesse scegliere un database open-source sul quale basare un proprio progetto o una propria applicazione, cosa sceglierebbe fra MySQL e PostgreSQL?</strong></p>
]]>
    </content>
</entry>

<entry>
    <title>Bytea in PostgreSQL con PHP e PDO</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2010/01/postgresql-bytea-php-pdo.html" />
    <id>tag:blog.2ndquadrant.it,2010:/it//2.72</id>

    <published>2010-01-17T09:55:15Z</published>
    <updated>2010-01-29T10:32:54Z</updated>

    <summary>Nell&apos;articolo precedente abbiamo visto le basi per la connessione a database PostgreSQL in PHP utilizzando PDO. In questo breve documento vedremo come effettuare inserimenti e come recuperare dati memorizzati in formato bytea in un database PostgreSQL utilizzando PHP con PDO....</summary>
    <author>
        <name>Gabriele Bartolini</name>
        <uri>http://www.2ndQuadrant.it/</uri>
    </author>
    
        <category term="Comunità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="byteaconphpepdo" label="bytea con PHP e PDO" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>Nell'articolo precedente abbiamo visto le <a href="/it/2009/11/php-postgresql-pdo-1.html">basi per la connessione a database PostgreSQL in PHP utilizzando PDO</a>.
In questo breve documento vedremo come effettuare inserimenti e come recuperare dati memorizzati in formato <code>bytea</code> in un database PostgreSQL utilizzando PHP con PDO.
Il tipo di dato <code>bytea</code> è un'alternativa fornita da PostgreSQL per la memorizzazione di oggetti binari (nei comuni DBMS e in SQL questi sono conosciuti come <strong>binary large objects</strong> o semplicemente <strong>BLOB</strong>). La gestione dei <code>bytea</code> è molto più semplice della gestione dei BLOB tradizionali, e questo è uno dei motivi del successo di questo tipo di dato in Postgres.</p>
]]>
        <![CDATA[<p>Come definito nella <a href="http://www.postgresql.org/docs/8.4/interactive/datatype-binary.html">documentazione di PostgreSQL sui tipi di dato binario</a>, il tipo di dato <code>bytea</code> permette la memorizzazione di stringhe binarie (vere e proprie sequenze di byte) di lunghezza variabile in un campo di una tabella.
PostgreSQL fornisce le specifiche per la codifica di queste stringhe binarie, tuttavia i linguaggi di programmazione e le librerie di astrazione più comuni mettono a disposizione meccanismi automatici e trasparenti per la serializzazione/deserializzazione dei dati.
PDO per PHP è uno di questi. Purtroppo, la documentazione sul tipo di dato <code>bytea</code> di PostgreSQL è molto scarsa e uno degli obiettivi di questo articolo è di dimostrare con un esempio quanto questo sia facile.
Gli esempi forniti sono molto semplici e il loro scopo è puramente didattico. Non sono da utilizzare "così come sono" in un ambiente di produzione in quanto non sono gestiti gli errori e le eccezioni.</p>

<h2>La tabella 'documenti'</h2>

<p>Supponiamo di avere una tabella chiamata <code>documenti</code>, così composta:</p>

<pre><code>
CREATE TABLE documenti (
   id serial,
   documento bytea
);
</code></pre>

<p>E supponiamo di volere memorizzare il <strong>contenuto compresso di una stringa di testo</strong> dentro il campo <code>documento</code>. In PHP è possibile comprimere il contenuto di una stringa con il comando <a href="http://php.net/manual/en/function.gzencode.php"><code>gzencode</code></a>. La funzione ritorna una stringa binaria che può essere memorizzata come oggetto binario in PostgreSQL.</p>

<pre><code>
// $docstr contiene la stringa originale (ad esempio un documento HTML)
// $gzdoc contiene la stringa binaria (il documento HTML compresso ad esempio)
$gzdoc = gzencode($docstr);
</code></pre>

<h2>Inserimento di un campo <code>bytea</code></h2>

<p>Il primo passo consiste nella creazione della query preparata:</p>

<pre><code>
$stmt = $connection->prepare('INSERT INTO documenti (documento) VALUES (?)');
</code></pre>

<p>Il passo successivo è quello di informare PDO che il primo parametro della query preparata è un tipo di dato <code>bytea</code> e deve essere trattato come un dato binario. La costante PDO da utilizzare è <code>PDO::PARAM_LOB</code>.</p>

<pre><code>
$stmt->bindParam(1, $gzdoc, PDO::PARAM_LOB);
</code></pre>

<p>L'ultimo passo è l'esecuzione della query:</p>

<pre><code>
$stmt->execute();
</code></pre>

<h2>Selezione di un campo <code>bytea</code></h2>

<p>Il modo migliore per recuperare il contenuto di un campo <code>bytea</code> è quello di associare una colonna a una variabile utilizzando <code>bindColumn</code> della classe <code>PDOStatement</code>. Il codice di esempio è fornito qui sotto:</p>

<pre><code>
// la variabile $id contiene l'ID del documento da recuperare
$stmt = $dbh->prepare('SELECT documento FROM documenti WHERE id = ?');
$stmt->bindParam(1, $id, PDO::PARAM_INT);
$stmt->execute(); // esegue la query
// Associa la prima colonna di risultato alla variabile locale
// $gzdoc che conterrà il valore del campo 'documento'
$stmt->bindColumn(1, $gzdoc);
$stmt->fetch(PDO::FETCH_BOUND);
// echo $gzdoc; // visualizza la stringa binaria
// echo gzdecode($gzdoc); // visualizza la stringa originale
</code></pre>

<h2>Conclusioni</h2>

<p>Questa breve guida ha esposto un piccolo esempio di inserimento e di selezione di dati binari in PostgreSQL memorizzati in campi <code>bytea</code> utilizzando PHP e PDO.
Il tipo di dato <code>bytea</code> rappresenta una delle caratteristiche peculiari di Postgres nel trattamento di dati binari e semplifica notevolmente la gestione dei backup logici. In MySQL un tipo di dato simile è costituito dal MEDIUMBLOB.
Se siete interessati a approfondire questo argomento, non esitate a contattarmi oppure a partecipare a uno dei corsi 2ndQuadrant su PHP.</p>
]]>
    </content>
</entry>

<entry>
    <title>Aggiornamento di sicurezza, esce PostgreSQL 8.4.2</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2009/12/postgresql-8-4-2.html" />
    <id>tag:blog.2ndquadrant.it,2009:/it//2.70</id>

    <published>2009-12-14T22:27:49Z</published>
    <updated>2009-12-14T23:37:26Z</updated>

    <summary>Il progetto PostgreSQL ha rilasciato oggi una versione minore aggiornando tutti i rami attualmente attivi di PostgreSQL, il noto sistema di database object-relational open-source. Sono infatti uscite le versioni 8.4.2, 8.3.9, 8.2.15, 8.1.19, 8.0.23 e 7.4.27. Le nuove versioni risolvono...</summary>
    <author>
        <name>Gabriele Bartolini</name>
        <uri>http://www.2ndQuadrant.it/</uri>
    </author>
    
        <category term="Comunità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Novità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="aggiornamentodisicurezza" label="Aggiornamento di sicurezza" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="postgresql842" label="PostgreSQL 8.4.2" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>Il progetto PostgreSQL ha rilasciato oggi una versione minore aggiornando tutti i rami attualmente attivi di PostgreSQL, il noto sistema di database object-relational open-source.
Sono infatti uscite le versioni 8.4.2, 8.3.9, 8.2.15, 8.1.19, 8.0.23 e 7.4.27.
Le nuove versioni risolvono un paio di problemi di sicurezza di piccola entità (uno a rischio moderato e uno a basso rischio).</p>
]]>
        <![CDATA[<p>Nello specifico: un <em>bug</em> di autenticazione SSL e una <em>scalata di privilegi</em> sulle espressioni per indici.
Gli utenti sono consigliati di aggiornare le loro installazioni.
Ci sono inoltre altri 48 interventi minori, la maggior parte dei quali riguarda soltanto la versione 8.4 ed alcuni nello specifico la versione per Windows. Alcuni cambiamenti riguardano:</p>

<ul>
<li>Prevenzione nella corruzione di indici hash</li>
<li>Aggiornamento dei dati sui fusi orari per 9 regioni</li>
<li>Correzione di un problema riguardante i permessi allo startup su Windows</li>
<li>Prevenzione del riavvio del server nel caso in cui un processo VACUUM FULL sia terminato</li>
<li>Correzione del bug di inizializzazione della cache all'avvio</li>
</ul>

<p>Per maggiori informazioni, si rimanda alle note di rilascio (in inglese).
Così come per le altre release minori, gli utenti non devono effettuare il backup e il restore dei loro database al fine di aggiornare la versione del server. E' sufficiente spengere PostgreSQL e aggiornare i file binari.</p>

<p>Gli utenti invece che utilizzano indici hash dovranno eseguire REINDEX dopo l'aggiornamento in modo da riparare ogni corruzione esistente.
Gli utenti che hanno saltato uno o più aggiornamenti potrebbero aver bisogno di controllare le note di rilascio per eventuali passi da fare in fasi successive all'aggiornamento.</p>

<p>Contestualmente, il PosgreSQL Global Development Group annuncia la <strong>dismissione delle versioni 7.4 e 8.0 a partire da giugno 2010</strong>: gli utenti che utilizzano queste versioni sono incoraggiati a pianificare una migrazione ad una release più recente.</p>

<ul>
<li>Note di rilascio: <a href="http://www.postgresql.org/docs/current/static/release.html">http://www.postgresql.org/docs/current/static/release.html</a></li>
<li>Pacchetti di installazione: <a href="http://www.postgresql.org/download/">http://www.postgresql.org/download/</a></li>
<li>Codice sorgente: <a href="http://www.postgresql.org/ftp/source/">http://www.postgresql.org/ftp/source/</a></li>
<li>Informazioni sulla sicurezza: <a href="http://www.postgresql.org/support/security">http://www.postgresql.org/support/security</a></li>
</ul>
]]>
    </content>
</entry>

<entry>
    <title>2ndQuadrant Italia sponsorizza il prossimo PGDay Italiano</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2009/11/2ndquadrant-italia-sponsorizza.html" />
    <id>tag:blog.2ndquadrant.it,2009:/it//2.69</id>

    <published>2009-11-24T17:37:40Z</published>
    <updated>2009-11-24T18:01:09Z</updated>

    <summary>2ndQuadrant Italia è orgogliosa di sponsorizzare il prossimo PGDay 2009 a Pisa.Il PostgreSQL Day (aka PGDay) è innanzitutto una festa. Una festa di PostgreSQL e, più in generale, del software libero e open-source. L&apos;evento si svolgerà a Pisa il giorno...</summary>
    <author>
        <name>Simone Martelli</name>
        
    </author>
    
        <category term="Comunità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Novità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="2ndquadrant-postgresql-pgday-2009-gold-partner.jpg" src="http://blog.2ndquadrant.it/it/2ndquadrant-postgresql-pgday-2009-gold-partner.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="72" width="200" /></span><p>2ndQuadrant Italia è orgogliosa di sponsorizzare il prossimo PGDay 2009 a Pisa.<br /></p><p>Il <a href="http://www.pgday.it/">PostgreSQL Day</a> (aka PGDay) è innanzitutto una festa. Una festa di PostgreSQL e, più in generale, del software libero e open-source.</p>

<p>L'evento si svolgerà a Pisa il giorno 4 dicembre 2009, presso il Dipartimento di Informatica dell'Università di Pisa: <br /></p><p>Area Pontecorvo, Edificio C, II piano<br />Largo Bruno Pontecorvo<br />Pisa, TOSCANA 56127 IT
      
    </p>

<p><b>Che cosa è il PGDay</b><br /></p><p>Il PGDay è un'occasione per gli utilizzatori e gli sviluppatori italiani di fare comunità, di conoscersi e di creare una rete concreta di professionisti che operano con questo prodotto di eccellenza per la gestione di basi di dati relazionali e a oggetti.</p>

<p>L'evento vuole inoltre proporsi come motivo per la promozione e la divulgazione di uno strumento libero completo per la gestione di basi di dati alternativo a soluzioni proprietarie. Fra le altre, particolari categorie interessate all'utilizzo di PostgreSQL sono:</p>

<ul>
<li>piccole / medie imprese</li>
<li>pubblica amministrazione</li>
<li>scuole e università (anche e soprattutto per motivi didattici)</li>
</ul>

<p>Il PGDay è articolato in una serie di talk, seminari, presentazioni e workshop pratici che si svolgeranno in parallelo.</p>

<p>L'associazione culturale non-profit Italian PostgreSQL Users Group invita tutti gli appassionati e i professionisti a partecipare all'evento.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Data warehousing open-source con PostgreSQL</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2009/11/data-warehousing-con-postgresql.html" />
    <id>tag:blog.2ndquadrant.it,2009:/it//2.68</id>

    <published>2009-11-11T23:14:21Z</published>
    <updated>2009-11-11T23:42:32Z</updated>

    <summary>Una delle soddisfazioni principali per il team italiano di 2ndQuadrant al PostgreSQL Day Europeo 2009, rappresentato a Parigi da Gianni Ciolli e Gabriele Bartolini, è stata la presentazione del talk &quot;Data warehousing with PostgreSQL&quot;. La necessità per un&apos;azienda o un&apos;organizzazione...</summary>
    <author>
        <name>Gabriele Bartolini</name>
        <uri>http://www.2ndQuadrant.it/</uri>
    </author>
    
        <category term="Comunità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Novità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="datawarehousingconpostgresql" label="Data warehousing con PostgreSQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>Una delle soddisfazioni principali per il team italiano di 2ndQuadrant al <a href="http://2009.pgday.eu/">PostgreSQL Day Europeo 2009</a>, rappresentato a Parigi da Gianni Ciolli e Gabriele Bartolini, è stata la presentazione del talk "Data warehousing with PostgreSQL".
La necessità per un'azienda o un'organizzazione di memorizzare dati per fini analitici è in continua crescita. E la crisi finanziaria spinge le aziende a cercare soluzioni in grado di ridurre il TCO (<em>total cost of ownership</em>) delle infrastrutture informatiche. Anche per le soluzioni che fino a qualche tempo fa erano esclusivo appannaggio di prodotti commerciali e di alto livello. Nel contempo, le soluzioni open-source si sono evolute.</p>

<p>Un esempio importante è rappresentato dai sistemi di business intelligence e dai sistemi di data warehouse. Nello specifico: la soluzione adottata per la memorizzazione dei dati, solitamente un RDBMS.</p>
]]>
        <![CDATA[<p>PostgreSQL è oggigiorno una soluzione flessibile, efficace e affidabile per la memorizzazione di grosse moli di dati, sia un singolo nodo che su un cluster di nodi distribuiti utilizzando soluzioni open-source come gli Skytools prodotti da Skype. Tra l'altro, la nota azienda di telecomunicazioni e di VoIP è da anni uno dei principali utilizzatori di PostgreSQL avendo anche basato su di esso la propria struttura informativa - capace di memorizzare fino a un miliardo di profili utente.</p>

<p>2ndQuadrant, sfruttando le competenze interne in materia di data warehouse e di soluzioni scalabili, ha pertanto pensato che fosse giunto il momento di dimostrare pubblicamente quanto PostgreSQL sia maturo per esigenze di questo tipo.</p>

<p>Lo ha fatto tramite un talk presentato al PGDay di Parigi da Gabriele Bartolini, volto a fornire una panoramica sullo stato dell'arte di PostgreSQL in materia di data warehouse e alcuni suggerimenti per l'ottimizzazione e la modellazione logica del database.
Le slide, in inglese, sono scaricabili secondo la licenza Creative Commons.</p>

<p><strong>Download:</strong> <a href="http://blog.2ndquadrant.it/it/2009/11/12/20091106_bartolini_datawarehousing_with_postgresql.pdf">Slide del talk "Data warehousing with PostgreSQL" (in inglese)</a>.</p>
]]>
    </content>
</entry>

<entry>
    <title>Connettersi a PostgreSQL con PHP utilizzando PDO</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2009/11/php-postgresql-pdo-1.html" />
    <id>tag:blog.2ndquadrant.it,2009:/it//2.67</id>

    <published>2009-11-10T22:49:13Z</published>
    <updated>2010-01-29T10:36:15Z</updated>

    <summary>PDO per PHP 5 rappresenta la miglior tecnologia al momento a disposizione per accedere a database utilizzando PHP, in quanto incorpora i vantaggi dell&#8217;approccio OO, delle prestazioni e infine di genericità e astrazione nell&#8217;accesso ai dati. In questo breve articolo...</summary>
    <author>
        <name>Gabriele Bartolini</name>
        <uri>http://www.2ndQuadrant.it/</uri>
    </author>
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="phpepostgresqlconpdo" label="PHP e PostgreSQL con PDO" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>PDO per PHP 5 rappresenta la miglior tecnologia al momento a
disposizione per accedere a database utilizzando PHP, in quanto incorpora i vantaggi
dell&#8217;approccio OO, delle prestazioni
e infine di genericità e astrazione nell&#8217;accesso ai dati. In questo
breve articolo vediamo alcuni esempi
per la connessione utilizzando il driver PostgreSQL.</p>
]]>
        <![CDATA[<p>PHP 5 mette a disposizione degli sviluppatori <strong>PDO</strong>,
<em>PHP Data Objects</em>,
una estensione molto potente per la connessione ai database
utilizzando una interfaccia consistente,
universale e leggera. L&#8217;accesso ai singoli database avviene sulla base
di un driver PDO specifico (ad esempio
esiste il driver PDO per PostgreSQL, come quello per MySQL, &#8230;).</p>

<p>In gergo tecnico, PDO fornisce un livello di astrazione all&#8217;accesso
ai dati. A differenza di framework
di astrazione dal database (ad esempio Pear MDB2 o l&#8217;obsoleto Pear
DB), PDO accede al database utilizzando
direttamente le funzioni native messe a disposizione dal driver specifico.</p>

<p>Al momento rappresenta sicuramente il miglior modo per accedere a
un sistema di gestione di database con PHP.</p>

<h2>Premesse</h2>

<p>L&#8217;esempio utilizza PHP 5.3 su Mac OS X, installato con Mac Ports.
E&#8217; necessario installare PDO con il driver per PostgreSQL.</p>

<p>Si presuppone che si abbia una buona conoscenza di PostgreSQL, che si
sia in grado di creare un utente, un database e una tabella.</p>

<p>Gli esempi sono stati testati su PostgreSQL 8.4.1, ma i concetti
sono applicabili anche su versioni precedenti (si consiglia comunque di
utilizzare almeno PostgreSQL 8.3 in produzione): il server PostgreSQL
si presuppone
installato sulla stessa macchina del PHP in ascolto sulla porta di
default 5432.</p>

<p>Infine, vengono riportati soltanto alcuni <em>snippet</em> (pezzi)
di codice, quelli
pertinenti all&#8217;utilizzo di PDO con PostgreSQL: sarà premura del
programmatore includerli
all&#8217;interno delle proprie applicazioni.</p>

<p>Come utente postgres, creare l&#8217;utente <code>pdo</code> e il
database <code>pdo</code>, eseguengo
le seguenti istruzioni SQL tramite <code>psql</code> (si possono
utilizzare anche altri prodotti
per l&#8217;amministrazione di database PostgreSQL come PHPPgAdmin, pgAdmin
III oppure l&#8217;alternativa
commerciale Navicat):</p>

<pre><code>
CREATE USER pdo WITH ENCRYPTED PASSWORD 'pdo';
CREATE DATABASE pdo WITH OWNER pdo ENCODING 'UTF8';
</code></pre>

<p>Connettersi al database <code>pdo</code> come utente
<code>pdo</code> e creare la tabella
<code>bands</code>:</p>

<pre><code>
CREATE TABLE bands (
        id SERIAL PRIMARY KEY,
        band_name VARCHAR(256) NOT NULL
);
</code></pre>

<h2>Connessione tramite PHP</h2>

<p>Per connettersi con PHP tramite PDO al database di esempio, è
necessario definire il <em>Data Source Name</em> (DSN).
La sintassi in PostgreSQL prevede un prefisso <code>pgsql:</code>
seguito da coppie variabile/valore per i seguenti
possibili elementi:</p>

<ul>
<li><code>host</code>: nome dell&#8217;host, indirizzo IP oppure directory
per la socket locale Unix;</li>
<li><code>port</code>: porta del server PostgreSQL (di default 5432);</li>
<li><code>dbname</code>: nome del database;</li>
<li><code>user</code>: nome dell&#8217;utente per la connesione al database;</li>
<li><code>password</code>: relativa password;</li>
</ul>

<p>Il DSN per l&#8217;esempio risulta pertanto essere:</p>

<pre><code>
pgsql:host=localhost port=5432 dbname=pdo user=pdo password=pdo
</code></pre>

<p>La connessione avviene tramite la creazione di un oggetto PDO,
specificando un DSN:</p>

<pre><code>
$dsn = 'pgsql:host=localhost port=5432 dbname=pdo user=pdo password=pdo';
$connection = new PDO($dsn);
</code></pre>

<p>Il primo vantaggio dell&#8217;utilizzo di PDO che si evince subito è
l&#8217;approccio Object Oriented.
In caso di errore, il costruttore della classe PDO lancia una
eccezione <code>PDOException</code>.
Includere il codice all&#8217;interno di blocchi try/catch semplifica molto
la gestione degli errori.</p>

<p>Per maggiori informazioni: <a
href="http://www.php.net/manual/en/pdo.construct.php">Costruttore
classe PDO</a>.</p>

<h2>Inserimento di record</h2>

<p>PDO mette a disposizione il metodo <a
href="http://www.php.net/manual/en/pdo.prepare.php"><code>prepare</code></a>
per la creazione delle <em>query preparate</em> (prepared statement).
La funzione accetta una stringa (che può contenere dei parametri,
solitamente identificati dal carattere &#8216;?&#8217;) e restituisce un oggetto
di tipo PDOStatement.</p>

<p>In caso di utilizzo di parametri, questo possono essere associati a
variabili locali, sgravando pertanto il programmatore
dalle operazioni di <em>escaping</em> che spesso costituiscono fonte
di problemi. Ciò è possibile utilizzando il metodo <a
href="http://www.php.net/manual/en/pdostatement.bindparam.php"><code>bindParam</code></a>
della classe PDOStatement.</p>

<pre><code>
$stmt = $connection->prepare('INSERT INTO bands (band_name) VALUES (?)');

// Inserisce la prima band
$band = 'Dave Matthews Band';
$stmt->bindParam(1, $band, PDO::PARAM_STR);
        // 1: il primo parametro nella query preparata
        // $band: la variabile che contiene il valore da passare alla
query come primo parametro
        // PDO::PARAM_STR: informa PDO che la variabile band deve
essere inserita nel database come stringa
$stmt->execute();
</code></pre>

<h2>Selezione di record</h2>

<p>Come nel caso dell&#8217;inserimento, PDO mette a disposizione la funzione <code>prepare</code> per l&#8217;esecuzione di query preparate (la cosa è estremamente utile nel caso di parametri nella condizione <code>WHERE</code> della query SELECT).</p>

<p>Tuttavia, torneremo con maggior dettaglio su questo argomento quando tratteremo i <code>bytea</code> (per usare une semplificazione, i campi <em>blob inline</em> di PostgreSQL). In questa sede copriremo il semplice metodo <a href="http://www.php.net/manual/en/pdo.query.php"><code>query</code></a> della classe PDO, con il seguente esempio:</p>

<pre><code>
$results = array();

 $sql = 'SELECT* FROM bands';

foreach ($connection->query($sql) as $row) {
    $results['id']= $row;
}
</code></pre>

<h2>Conclusioni</h2>

<p>Questa breve guida ha esposto un esempio di connessione a un database PostgreSQL utilizzando PDO e l&#8217;esecuzione di una istruzione INSERT e di una SELECT. L&#8217;esecuzione di istruzioni DELETE e UPDATE è molto semplice e può essere intuita facilmente. In uno dei prossimi articoli copriremo uno degli aspetti meno trattati dell&#8217;interfacciamento di PostgreSQL e PDO in PHP: l&#8217;inserimento e il recupero di campi di tipo <code>bytea</code>.</p>

<p>Se siete interessati a approfondire questo argomento, non esitate a contattarmi oppure a partecipare a uno dei corsi 2ndQuadrant su PHP.</p>
]]>
    </content>
</entry>

<entry>
    <title>2ndQuadrant al PGDay Europeo</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2009/11/2ndquadrant-al-pgday-europeo.html" />
    <id>tag:blog.2ndquadrant.it,2009:/it//2.66</id>

    <published>2009-11-06T15:19:08Z</published>
    <updated>2009-11-06T15:38:16Z</updated>

    <summary>2ndQuadrant è presente in qualità di partner al PGDay Europeo 2009 di Parigi, Francia, la terza edizione della principale conferenza annuale a livello europeo di PostgreSQL (6 e 7 novembre 2009). Simon Riggs, CEO di 2ndQuadrant ha aperto la conferenza...</summary>
    <author>
        <name>Gabriele Bartolini</name>
        <uri>http://www.2ndQuadrant.it/</uri>
    </author>
    
        <category term="Comunità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Novità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="postgresqldayeuropeo2009" label="PostgreSQL Day Europeo 2009" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>2ndQuadrant è presente in qualità di partner al <a href="http://2009.pgday.eu/">PGDay Europeo 2009 di Parigi</a>, Francia, la terza edizione della principale conferenza annuale a livello europeo di PostgreSQL (6 e 7 novembre 2009).</p>

<p>Simon Riggs, CEO di 2ndQuadrant ha aperto la conferenza con il suo keynote speech sul futuro di PostgreSQL "<em>PostgreSQL: The next 20 years</em>".</p>

<p>Gabriele Bartolini, responsabile di 2ndQuadrant Italia, ha presentato un intervento sui sistemi di datawarehouse open-source con PostgreSQL.</p>

<p>Infine, Simon Riggs, in collaborazione con Robert Hodges di <a href="http://www.continuent.com/">Continuent</a> ha brillantemente esposto il futuro di PostgreSQL nel campo dell'alta disponibilità (High Availability).</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Quick tip: come installare PostgreSQL 8.4 su Debian Lenny utilizzando backports.org</title>
    <link rel="alternate" type="text/html" href="http://blog.2ndquadrant.it/it/2009/09/postgresql-84-su-debian-lenny.html" />
    <id>tag:blog.2ndquadrant.it,2009:/it//2.65</id>

    <published>2009-09-23T18:01:12Z</published>
    <updated>2009-11-06T15:53:53Z</updated>

    <summary>Quanti di vuoi utilizzano Debian Lenny e vorrebbero essere in grado di installare PostgreSQL 8.4, l&apos;ultima versione stabile? Ecco una brevissima guida su come farlo utilizzando i pacchetti forniti da backports.org....</summary>
    <author>
        <name>Marco Nenciarini</name>
        <uri>http://www.2ndQuadrant.it/</uri>
    </author>
    
        <category term="Amministrazione" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Comunità" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Installazione" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="postgresqlsudebianlenny" label="PostgreSQL su Debian Lenny" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="it" xml:base="http://blog.2ndquadrant.it/it/">
        <![CDATA[<p>Quanti di vuoi utilizzano Debian Lenny e vorrebbero essere in grado di installare PostgreSQL 8.4, l'ultima versione stabile? Ecco una brevissima guida su come farlo utilizzando i pacchetti forniti da <a href="http://www.backports.org">backports.org</a>.</p>
]]>
        <![CDATA[<p>Il primo passo consiste nell'abilitare i backport:</p>

<pre><code>cat &lt;&lt; E_O_BACKPORTS &gt; /etc/apt/sources.list.d/backports.list
deb http://www.backports.org/debian lenny-backports main contrib non-free
deb-src http://www.backports.org/debian lenny-backports main contrib non-free
E_O_BACKPORTS

cat &lt;&lt; E_O_APTPREF &gt;&gt; /etc/apt/preferences

Package: *
Pin: release a=lenny-backports
Pin-Priority: 200
E_O_APTPREF

wget -O - http://backports.org/debian/archive.key | apt-key add -

apt-get update
</code></pre>

<p>Poi installare postgresql-8.4</p>

<pre><code>apt-get -t lenny-backports postgresql-8.4 postgresql-contrib-8.4 postgresql-doc-8.4
</code></pre>

<p>Semplice, no?</p>
]]>
    </content>
</entry>

</feed>
