<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SIMOTRONE WEB PAGE &#187; postgres</title>
	<atom:link href="http://www.simotrone.it/tag/postgres/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.simotrone.it</link>
	<description>Simotrone is always here!</description>
	<lastBuildDate>Sat, 04 Feb 2012 18:30:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Postgres: da Sarge a Lenny</title>
		<link>http://www.simotrone.it/2011/02/04/postgres-da-sarge-a-lenny/</link>
		<comments>http://www.simotrone.it/2011/02/04/postgres-da-sarge-a-lenny/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 06:10:40 +0000</pubDate>
		<dc:creator>Simotrone</dc:creator>
				<category><![CDATA[Binary People]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Lenny]]></category>
		<category><![CDATA[postgres]]></category>
		<category><![CDATA[sarge]]></category>

		<guid isPermaLink="false">http://www.simotrone.it/?p=3199</guid>
		<description><![CDATA[Ho ripescato una vecchia box con ancora Sarge sopra. Ho deciso di aggiornarla per portarla alla versione Lenny (attualmente stable di Debian). Innumerevoli porconi sono stati lanciati causa conflitti vari legati a python2.3 (che mi ero colpevolmente dimenticato di aggiornare prima del resto) e ad un altro paio di conflitti. Una vecchia versione di postgres [...]]]></description>
			<content:encoded><![CDATA[<p>Ho ripescato una vecchia box con ancora Sarge sopra.<br />
Ho deciso di aggiornarla per portarla alla versione Lenny (attualmente stable di Debian).<br />
Innumerevoli porconi sono stati lanciati causa conflitti vari legati a python2.3 (che mi ero colpevolmente dimenticato di aggiornare prima del resto) e ad un altro paio di conflitti.</p>
<p>Una vecchia versione di postgres (7.4.x) aveva due (inutili) database nella pancia che dopo l&#8217;aggiornamento non erano piu&#8217; nel server 8.3  (no migrazione automatica fra le versioni di Pg) &#8211; ma ancora presenti nel filesystem (in <strong>/var/lib/postgres/data/</strong> ).</p>
<p>Raccatta la vecchia versione sul sito ftp di Postgres: <strong>ftp://ftp-archives.postgresql.org</strong>.<br />
Installa la vecchia versione da qualche parte in /opt specificando il prefisso in fase di configurazione (per evitare bordelli), make e make install.<br />
&#8230; Fai partire il postmaster locale che punta al repository vecchio:</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">postgres@server:/opt/pg$ bin/postmaster -D /var/lib/postgres/data/</div>
</div>
<p>FAIL</p>
<blockquote><p>DETAIL:  The database cluster was initialized with HAVE_INT64_TIMESTAMP but the server was compiled without HAVE_INT64_TIMESTAMP.</p></blockquote>
<p>Che cosa non va? Ravanando sul web capisco che serve l&#8217;obzione: &#8216;<strong>&#8211;enable-integer-datetimes</strong>&#8216; in configurazione. Pulisci la dir, riconfigura, ricompila e ribuilda. Questa volta parte.<br />
Non serve neanche controllare, se non si vuole: dumpall diretto sul server, salvataggio dei dati in un file, control+C per chiudere il server vecchia versione nonchè remove&#8230; infine riavvio di quello nuovo.</p>
<p>Nota: La prossima volta, meglio fare il dump <em>prima</em>. <img src='http://www.simotrone.it/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.simotrone.it/2011/02/04/postgres-da-sarge-a-lenny/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postgres 9.0.1</title>
		<link>http://www.simotrone.it/2010/12/09/postgres-9-0-1/</link>
		<comments>http://www.simotrone.it/2010/12/09/postgres-9-0-1/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 23:21:44 +0000</pubDate>
		<dc:creator>Simotrone</dc:creator>
				<category><![CDATA[Binary People]]></category>
		<category><![CDATA[postgres]]></category>
		<category><![CDATA[slackware]]></category>

		<guid isPermaLink="false">http://www.simotrone.it/?p=3125</guid>
		<description><![CDATA[Sfruttando Slackbuild, ho installato postgres 9.0.1 sull&#8217;e3pc. Le possibilità che l&#8217;rdbms non pianti tutto sono poche, ma solo il futuro ci dirà se quei 512 MB di RAM riescono a reggere Apache+Pg+Catalyst. Dopo mezz&#8217;oretta di setting vari (ho tolto dalla configurazione di postgres python, tcl e ldap), compilazione, inizializzazione del db (man initdb): postgres=# SELECT [...]]]></description>
			<content:encoded><![CDATA[<p>Sfruttando <a href="http://slackbuilds.org/repository/13.1/system/postgresql/">Slackbuild</a>, ho installato <a href="http://www.postgresql.org/docs/9.0/static/release-9-0">postgres 9.0.1</a> sull&#8217;e3pc.<br />
Le possibilità che l&#8217;rdbms non pianti tutto sono poche, ma solo il futuro ci dirà se quei 512 MB di RAM riescono a reggere Apache+Pg+Catalyst.</p>
<p>Dopo mezz&#8217;oretta di setting vari (ho tolto dalla configurazione di postgres python, tcl e ldap), compilazione, inizializzazione del db (man initdb):</p>
<pre>postgres=# SELECT VERSION();
                                        version
---------------------------------------------------------------------------------------
 PostgreSQL 9.0.1 on i486-slackware-linux-gnu, compiled by GCC gcc (GCC) 4.4.4, 32-bit
(1 row)</pre>
<p>Creato il ruolo per l&#8217;utente&#8230; pare andare tutto bene. <img src='http://www.simotrone.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre>postgres=# CREATE ROLE sim NOSUPERUSER CREATEDB NOCREATEROLE INHERIT LOGIN;
CREATE ROLE
postgres=# \du
                       List of roles
 Role name |            Attributes             | Member of
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}
 sim       | Create DB                         | {}</pre>
<p>Riguardo i driver di Perl ho preferito installare <a href="http://search.cpan.org/~turnstep/DBD-Pg-2.17.2/Pg.pm">DBD::Pg</a> da <a href="http://slackbuilds.org/repository/13.1/libraries/perl-DBD-Pg/">slackbuild</a> invece che con <a href="http://search.cpan.org/~miyagawa/App-cpanminus-1.1004/bin/cpanm">cpanm</a>, perchè CPAN mi dava alcuni errori.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simotrone.it/2010/12/09/postgres-9-0-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>to_char</title>
		<link>http://www.simotrone.it/2009/05/29/to_char/</link>
		<comments>http://www.simotrone.it/2009/05/29/to_char/#comments</comments>
		<pubDate>Fri, 29 May 2009 10:24:55 +0000</pubDate>
		<dc:creator>Simotrone</dc:creator>
				<category><![CDATA[Binary People]]></category>
		<category><![CDATA[manipolazione stringhe]]></category>
		<category><![CDATA[postgres]]></category>
		<category><![CDATA[to_char]]></category>

		<guid isPermaLink="false">http://www.simotrone.it/?p=1892</guid>
		<description><![CDATA[Lavorando su un postgres vecchiotto avevo scritto una riga di codice php che con le nuove versioni non è accettata per questioni di casting. Visto che in effetti il risparmio è notevole, oltre che più corretto, segnalo la funzione TO_CHAR (che ha nelle opzioni quello che spesso serve per fare manipolazioni di date). Quello che [...]]]></description>
			<content:encoded><![CDATA[<p>Lavorando su un postgres vecchiotto avevo scritto una riga di codice php che con le nuove versioni non è accettata per questioni di casting.<br />
Visto che in effetti il risparmio è notevole, oltre che più corretto, segnalo la funzione <a href="http://www.postgresql.org/docs/8.3/interactive/functions-formatting.html">TO_CHAR</a> (che ha nelle opzioni quello che spesso serve per fare manipolazioni di date).</p>
<p>Quello che prima era trovato concatenando due stringhe ricavate da DATE_PART (per prendere una parte di un timestamp without date zone) e facendolo passare per LPAD in due cifre riempito con caratteri 0:</p>
<pre>( LPAD( DATE_PART('day',file_upped), 2,'0') ||
    LPAD( DATE_PART('month',file_upped), 2,'0') )</pre>
<p>ora è trovato con questa semplice funzione che ha fra le opzioni già la possibilità di avere giorno e mese in campo di 2 cifre:</p>
<pre>TO_CHAR(file_upped,'DDMM')</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.simotrone.it/2009/05/29/to_char/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GROUP BY pinco HAVING pallino</title>
		<link>http://www.simotrone.it/2009/05/25/group-by-pinco-having-pallino/</link>
		<comments>http://www.simotrone.it/2009/05/25/group-by-pinco-having-pallino/#comments</comments>
		<pubDate>Mon, 25 May 2009 18:04:22 +0000</pubDate>
		<dc:creator>Simotrone</dc:creator>
				<category><![CDATA[Binary People]]></category>
		<category><![CDATA[Visions]]></category>
		<category><![CDATA[group by]]></category>
		<category><![CDATA[having]]></category>
		<category><![CDATA[postgres]]></category>

		<guid isPermaLink="false">http://www.simotrone.it/?p=1897</guid>
		<description><![CDATA[Mea culpa. Negli ultimi mesi ho dovuto dare un occhio in più alle query SQL e così sto ripassando e imparando un sacco di cose che prima mi erano sconosciute. Una robba estremamente utile che prima facevo (male) &#8220;tagliando&#8221; in perl i dati fetch&#8217;ati dal database è prendere raggruppamenti di dati gruppati secondo una clausola. [...]]]></description>
			<content:encoded><![CDATA[<p>Mea culpa. Negli ultimi mesi ho dovuto dare un occhio in più alle query SQL e così sto ripassando e imparando un sacco di cose che prima mi erano sconosciute.</p>
<p>Una robba estremamente utile che prima facevo (male) &#8220;tagliando&#8221; in perl i dati <em>fetch&#8217;ati</em> dal database è prendere raggruppamenti di dati gruppati secondo una clausola.</p>
<p>La sostanza è che ultimamente mi ero ritrovato molto a mio agio nel raggruppare dati grazie all&#8217;opzione GROUP BY conteggiando le voci con COUNT. Il problema era che non sapevo come fare un taglio sul conteggio, e così scremavo i dati in perl dopo averli raccolti tutti dal database.<br />
Questa cosa palesemente non risultava buona.<br />
Quindi dopo prezioso suggerimento ho letto <a href="http://www.postgresql.org/docs/current/static/queries-table-expressions.html">questa paginetta</a> e ho trovato HAVING. <img src='http://www.simotrone.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Niente di trascendentale, ma per me salvifico.</p>
<pre> =&gt; SELECT nome, COUNT(*) FROM lista
       GROUP BY nome HAVING COUNT(*) > 600 ORDER BY count DESC;</pre>
<blockquote><p>Dopo aver filtrato (eventualmente) i dati con WHERE, l&#8217;input derivato dalla tabella può essere soggetto al GROUP BY per raggruppare dati, e i raggruppamenti possono essere scremati dalla clausola HAVING.<br />
GROUP BY viene utilizzato per raggruppare insieme  quelle righe della tabella che condividono gli stessi valori in tutte le colonne selezionate.<br />
I raggruppamenti vanno d&#8217;accordo con funzioni che aggregano espressioni &#8211; come SUM() o COUNT().</p></blockquote>
<p>Piccole scoperte per grandi pivelli. <img src='http://www.simotrone.it/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.simotrone.it/2009/05/25/group-by-pinco-having-pallino/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ricreando tabelle</title>
		<link>http://www.simotrone.it/2009/05/23/ricreando-tabelle/</link>
		<comments>http://www.simotrone.it/2009/05/23/ricreando-tabelle/#comments</comments>
		<pubDate>Sat, 23 May 2009 22:41:30 +0000</pubDate>
		<dc:creator>Simotrone</dc:creator>
				<category><![CDATA[Binary People]]></category>
		<category><![CDATA[pg_dump]]></category>
		<category><![CDATA[postgres]]></category>
		<category><![CDATA[tabelle]]></category>

		<guid isPermaLink="false">http://www.simotrone.it/?p=1890</guid>
		<description><![CDATA[Avevo necessità di ricopiare una tabella già fatta da un database postgres (8.3) ad un altro. Come fare per avere la stessa linea &#8220;CREATE&#8221; se l&#8217;history non riesce a recuperare così tanto indietro nel tempo? Semplice: usare pg_dump. pg_dump è l&#8217;utility per fare il backup dei database Postgres. Con un paio di opzioni, ha fatto [...]]]></description>
			<content:encoded><![CDATA[<p>Avevo necessità di ricopiare una tabella già fatta da un database postgres (8.3) ad un altro.<br />
Come fare per avere la stessa linea &#8220;CREATE&#8221; se l&#8217;history non riesce a recuperare così tanto indietro nel tempo?<br />
Semplice: usare <strong>pg_dump</strong>. <img src='http://www.simotrone.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>pg_dump</strong> è l&#8217;utility per fare il backup dei database Postgres. Con un paio di opzioni, ha fatto perfettamente al caso mio:</p>
<pre># pg_dump nome_database --schema-only -t nome_tabella</pre>
<p>L&#8217;opzione <strong>-t</strong> o <strong>&#8211;table</strong> serve a specificare la tabella che abbiamo scelto, e <strong>&#8211;schema-only</strong> dumpa solo la definizione dei data (non i dati stessi). </p>
<p>Senza specificare un output, pg_dump spamma su STDOUT, quindi con un taglia e incolla il gioco è fatto. <img src='http://www.simotrone.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.simotrone.it/2009/05/23/ricreando-tabelle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bigint</title>
		<link>http://www.simotrone.it/2009/05/19/bigint/</link>
		<comments>http://www.simotrone.it/2009/05/19/bigint/#comments</comments>
		<pubDate>Tue, 19 May 2009 21:51:24 +0000</pubDate>
		<dc:creator>Simotrone</dc:creator>
				<category><![CDATA[Binary People]]></category>
		<category><![CDATA[per la legge dei grandi numeri]]></category>
		<category><![CDATA[postgres]]></category>

		<guid isPermaLink="false">http://www.simotrone.it/?p=1878</guid>
		<description><![CDATA[Un bigint occupa 8 bytes. Dal manuale di postgres: bigint 8 bytes large-range integer range: -9223372036854775808 to 9223372036854775807 Byte Bit Potenza Range decimale Ordine 1 8 28 0 .. 255 100 2 16 216 0 .. 65 535 10K 4 32 232 0 .. 4 294 967 295 1 miliardo 8 64 264 0 .. [...]]]></description>
			<content:encoded><![CDATA[<p>Un bigint occupa 8 bytes.<br />
Dal manuale di postgres:</p>
<pre>bigint
8 bytes
large-range integer
range: -9223372036854775808 to 9223372036854775807</pre>
<table border="1" cellpadding="3">
<tr>
<td>Byte</td>
<td>Bit</td>
<td>Potenza</td>
<td>Range decimale</td>
<td>Ordine</td>
</tr>
<tr>
<td>1</td>
<td>8</td>
<td>2<sup>8</sup></td>
<td>0 .. 255</td>
<td>100</td>
</tr>
<tr>
<td>2</td>
<td>16</td>
<td>2<sup>16</sup></td>
<td>0 .. 65 535</td>
<td>10K</td>
</tr>
<tr>
<td>4</td>
<td>32</td>
<td>2<sup>32</sup></td>
<td>0 .. 4 294 967 295</td>
<td>1 miliardo</td>
</tr>
<tr>
<td>8</td>
<td>64</td>
<td>2<sup>64</sup></td>
<td>0 .. 18 446 744 073 709 551 615</td>
<td>1 miliardo di miliardi</td>
</tr>
</table>
<p>Hai voglia, oh caro spammatore, a riempirmi di record. <img src='http://www.simotrone.it/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.simotrone.it/2009/05/19/bigint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQL</title>
		<link>http://www.simotrone.it/2009/05/05/postgresql/</link>
		<comments>http://www.simotrone.it/2009/05/05/postgresql/#comments</comments>
		<pubDate>Tue, 05 May 2009 06:47:29 +0000</pubDate>
		<dc:creator>Simotrone</dc:creator>
				<category><![CDATA[Binary People]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[postgres]]></category>

		<guid isPermaLink="false">http://www.simotrone.it/?p=1581</guid>
		<description><![CDATA[A forza di pistolare sui db, sto provando un po&#8217; di tutto per vedere dove mi trovo meglio. Un db importante sul fronte opensource è PostgreSQL (sito ufficiale e wiki per un po&#8217; di storia). Per creare utenze all&#8217;interno del sistema postgres è possibile utilizzare programmi da shell (createuser) o comandi da prompt (CREATE ROLE [...]]]></description>
			<content:encoded><![CDATA[<p>A forza di pistolare sui db, sto provando un po&#8217; di tutto per vedere dove mi trovo meglio.<br />
Un db importante sul fronte opensource è PostgreSQL (<a href="http://www.postgresql.org/">sito ufficiale</a> e <a href="http://en.wikipedia.org/wiki/PostgreSQL">wiki</a> per un po&#8217; di storia).</p>
<p>Per <a href="http://www.postgresql.org/docs/8.3/interactive/database-roles.html">creare utenze</a> all&#8217;interno del sistema postgres è possibile utilizzare programmi da shell (<em>createuser</em>) o comandi da prompt (<em>CREATE ROLE utente</em>).<br />
Per avere un&#8217;idea dei ruoli creati si puo&#8217; fare un select sulla tabella pg_roles del db postgres (di default)&#8230;</p>
<pre>postgres=# SELECT rolname FROM pg_roles ;
 rolname
----------
 postgres
 odg
(2 rows)</pre>
<p>oppure usare il semplice comando <strong>\du</strong></p>
<pre>postgres=# \du
                               List of roles
 Role name | Superuser | Create role | Create DB | Connections | Member of
-----------+-----------+-------------+-----------+-------------+-----------
 odg       | no        | no          | no        | no limit    | {}
 postgres  | yes       | yes         | yes       | no limit    | {}
(2 rows)</pre>
<p>(Come si vede ho creato un ruolo extra (odg) oltre a quello di default.)</p>
<p><span id="more-1581"></span></p>
<hr/>
<p>Al momento in cui scrivo, la versione disponibile per Debian (sid) è la 8.3.7 ed è installabile senza sforzo con <strong>dselect</strong> o <strong>apt-get</strong>. Se si installa anche il pacchetto <strong>postgresql-doc-8.3</strong> in <strong>/usr/share/doc/postgresql-doc-8.3/html/</strong> si troveranno tutte le informazioni necessarie offline (oppure c&#8217;e&#8217; il <a href="http://www.postgresql.org/docs/">manuale online</a>).<br />
(Se avete apache installato, di default si puo&#8217; accedere alla manualista browser&#8217;ando su <strong>http://localhost/doc/postgresql-doc-8.3/html/</strong>.)<br />
Nel caso (probabile) si voglia usare apache+php+pgsql, meglio installare anche il pacchetto php5-pgsql. <img src='http://www.simotrone.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Il capitolo 1 (Tutorial) spiega tutte le funzioni di base:<br />
createdb, destroydb, SELECT, INSERT, UPDATE, DELETE, \h, \q, ecc&#8230;</p>
<p>Di default nel momento dell&#8217;installazione si creano 3 database: postgres (a cui si ha accesso di default con <strong>$ psql</strong>), template0 e template1; maggiori informazioni <a href="http://www.postgresql.org/docs/8.3/interactive/creating-cluster.html">qui</a> e <a href="http://www.postgresql.org/docs/8.3/interactive/manage-ag-templatedbs.html">quo</a>.</p>
<p>Per connettersi da un db ad un altro si deve usare da prompt:<br />
<strong># \c nome_database</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simotrone.it/2009/05/05/postgresql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

