<?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 back!</description>
	<lastBuildDate>Fri, 30 Jul 2010 05:47:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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 prima era [...]]]></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.
La sostanza [...]]]></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 perfettamente [...]]]></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 .. 18 446 744 073 709 551 615
1 miliardo di miliardi


Hai voglia, oh caro spammatore, a riempirmi di record.  
]]></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 utente).
Per avere [...]]]></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>
