<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>map freely</title>
	<atom:link href="http://mapfreely.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://mapfreely.org</link>
	<description>free (geographic) software, open mind, open society......think globally, map locally :-)</description>
	<lastBuildDate>Fri, 25 May 2012 21:11:31 +0000</lastBuildDate>
	<language>it</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mapfreely.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>map freely</title>
		<link>http://mapfreely.org</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mapfreely.org/osd.xml" title="map freely" />
	<atom:link rel='hub' href='http://mapfreely.org/?pushpress=hub'/>
		<item>
		<title>slony &#124; replicare db postgresql (postgis)</title>
		<link>http://mapfreely.org/2012/05/25/slony-replicare-db-postgresql-postgis/</link>
		<comments>http://mapfreely.org/2012/05/25/slony-replicare-db-postgresql-postgis/#comments</comments>
		<pubDate>Fri, 25 May 2012 10:59:05 +0000</pubDate>
		<dc:creator>flaviorigolon</dc:creator>
				<category><![CDATA[db-ing & geodb-ing]]></category>
		<category><![CDATA[postgis]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://mapfreely.org/?p=973</guid>
		<description><![CDATA[Ho provato a buttarmi (finalmente dico io) su Slony. Si tratta di un sistema per replicare uno o più database da un server postgresql su un altro o piu&#8217; server (anche remoti). Ho fatto un piccolo test (per ora) cercando di replicare il db spaziale (con estensione postgis) della carta tecnica regionale numerica su un [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=973&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ho provato a buttarmi (finalmente dico io) su Slony. Si tratta di un sistema per replicare uno o più database da un server postgresql su un altro o piu&#8217; server (anche remoti).</p>
<p>Ho fatto un piccolo test (per ora) cercando di replicare il db spaziale (con estensione postgis) della carta tecnica regionale numerica su un altro server.</p>
<p>Su entrambi i server gira Debian stable (ad oggi &#8220;squeeze&#8221;) ed hanno rispettivamente gli IP: 192.168.1.71 e 100.0.4.231.</p>
<p>Creiamo il database (vuoto) sul server slave con il comando:</p>
<p><span style="color:#0000ff;">$ su</span></p>
<p><span style="color:#0000ff;"># su postgres</span></p>
<p><span style="color:#0000ff;"># psql</span></p>
<p><span style="color:#0000ff;">=# CREATE DATABASE ctr_new_slave OWNER sit template=template_gis;</span></p>
<p>e lo strutturiamo come &#8220;ctr_new&#8221; (db master):</p>
<p><span style="color:#0000ff;">$ pg_dump -s -U postgres -h localhost ctr_new | psql -U postgres -h 100.0.4.71 ctr_new_slave</span></p>
<p>Quest&#8217;ultimo comando è stato impartito dal server master.</p>
<p>Installare slony via apt-get:</p>
<p><span style="color:#0000ff;"># apt-get install slony1-2-bin postgresql-8.4-slony1-2</span></p>
<p>Il database (già presente) deve avere abilitato il linguaggio procedurale plpgsql. Essendo un db creato mediante un &#8220;template_gis&#8221; che già incorpora questo linguaggio non ho dovuto fare niente. In caso di nuovo db ricordarsi invece di abilitarlo con:</p>
<p>(come utente postgres) <span style="color:#0000ff;"># createlang plpgsql nome_db</span></p>
<p>Una prerogativa per il funzionamento di slony è che ogni tabella del db abbia una chiave primaria (notare che possono essere replicate anche solo alcune tabelle specificandole nel file di configurazione che vedremo dopo).</p>
<p><strong>Configurazione degli script altperl</strong></p>
<p>Ci sono diversi modi per configurare e manovrare slony: in questo esempio useremo gli script altperl (si tratta di script in perl appunto).</p>
<p>ci spostiamo della directory &#8220;/etc/slony/&#8221; e copiamo al suo interno il file di configurazione di esempio che si trova in &#8220;/usr/share/doc/slony1-2-bin/examples/slon_tools.conf-sample.gz&#8221; (dopo averlo decompresso e averne fatto una copia chiamata slon_tools.conf)</p>
<p>(come root):</p>
<p><span style="color:#0000ff;"># cd /etc/slony</span></p>
<p><span style="color:#0000ff;"># cp /usr/share/doc/slony1-2-bin/examples/slon_tools.conf .</span></p>
<p>modifichiamo il file con nano:</p>
<p><span style="color:#0000ff;"># nano slon_tools.conf</span></p>
<p>riporto il file:</p>
<p>======================================================</p>
<p><span style="color:#0000ff;"># $Id: slon_tools.conf-sample,v 1.8.2.4 2009-08-17 22:21:38 devrim Exp $</span><br />
<span style="color:#0000ff;"># Author: Christopher Browne</span><br />
<span style="color:#0000ff;"># Copyright 2004-2009 Afilias Canada</span><br />
<span style="color:#0000ff;"># Revised extensively by Steve Simms</span></p>
<p><span style="color:#0000ff;"># Keeping the following three lines for backwards compatibility in</span><br />
<span style="color:#0000ff;"># case this gets incorporated into a 1.0.6 release.</span><br />
<span style="color:#0000ff;">#</span><br />
<span style="color:#0000ff;"># TODO: The scripts should check for an environment variable</span><br />
<span style="color:#0000ff;"># containing the location of a configuration file.  That would</span><br />
<span style="color:#0000ff;"># simplify this configuration file and allow Slony-I tools to still work</span><br />
<span style="color:#0000ff;"># in situations where it doesn&#8217;t exist.</span><br />
<span style="color:#0000ff;">#</span><br />
<span style="color:#0000ff;">if ($ENV{&#8220;SLONYNODES&#8221;}) {</span><br />
<span style="color:#0000ff;">    require $ENV{&#8220;SLONYNODES&#8221;};</span><br />
<span style="color:#0000ff;">} else {</span></p>
<p><span style="color:#0000ff;">    # The name of the replication cluster.  This will be used to</span><br />
<span style="color:#0000ff;">    # create a schema named _$CLUSTER_NAME in the database which will</span><br />
<span style="color:#0000ff;">    # contain Slony-related data.</span><br />
<span style="color:#0000ff;">    $CLUSTER_NAME = &#8216;replication&#8217;;</span></p>
<p><span style="color:#0000ff;">    # The directory where Slony should record log messages.  This</span><br />
<span style="color:#0000ff;">    # directory will need to be writable by the user that invokes</span><br />
<span style="color:#0000ff;">    # Slony.</span><br />
<span style="color:#0000ff;">    $LOGDIR = &#8216;/var/log/slony1&#8242;;</span></p>
<p><span style="color:#0000ff;">    # SYNC check interval (slon -s option)</span><br />
<span style="color:#0000ff;">    # $SYNC_CHECK_INTERVAL = 1000;</span></p>
<p><span style="color:#0000ff;">    # Which node is the default master for all sets?</span><br />
<span style="color:#0000ff;">    $MASTERNODE = 1;</span></p>
<p><span style="color:#0000ff;">    # Which debugging level to use?  [0-4]</span><br />
<span style="color:#0000ff;">    $DEBUGLEVEL = 2;</span></p>
<p><span style="color:#0000ff;">    # Include add_node lines for each node in the cluster.  Be sure to</span><br />
<span style="color:#0000ff;">    # use host names that will resolve properly on all nodes</span><br />
<span style="color:#0000ff;">    # (i.e. only use &#8216;localhost&#8217; if all nodes are on the same host).</span><br />
<span style="color:#0000ff;">    # Also, note that the user must be a superuser account.</span></p>
<p><span style="color:#0000ff;">    add_node(node     =&gt; 1,</span><br />
<span style="color:#0000ff;">         host     =&gt; &#8217;192.168.1.71&#8242;,</span><br />
<span style="color:#0000ff;">         dbname   =&gt; &#8216;ctr_new&#8217;,</span><br />
<span style="color:#0000ff;">         port     =&gt; 5432,</span><br />
<span style="color:#0000ff;">         user     =&gt; &#8216;postgres&#8217;,</span><br />
<span style="color:#0000ff;">             password =&gt; &#8221;);</span></p>
<p><span style="color:#0000ff;">    add_node(node     =&gt; 2,</span><br />
<span style="color:#0000ff;">         host     =&gt; &#8217;100.0.4.71&#8242;,</span><br />
<span style="color:#0000ff;">         dbname   =&gt; &#8216;ctr_new_slave&#8217;,</span><br />
<span style="color:#0000ff;">         port     =&gt; 5432,</span><br />
<span style="color:#0000ff;">         user     =&gt; &#8216;postgres&#8217;,</span><br />
<span style="color:#0000ff;">             password =&gt; &#8221;);</span></p>
<p><span style="color:#0000ff;">}</span></p>
<p><span style="color:#0000ff;"># The $SLONY_SETS variable contains information about all of the sets</span><br />
<span style="color:#0000ff;"># in your cluster.</span></p>
<p><span style="color:#0000ff;">$SLONY_SETS = {</span></p>
<p><span style="color:#0000ff;">    # A unique name for the set</span><br />
<span style="color:#0000ff;">    &#8220;set1&#8243; =&gt; {</span></p>
<p><span style="color:#0000ff;">    # The set_id, also unique</span><br />
<span style="color:#0000ff;">    &#8221;set_id&#8221; =&gt; 1,</span></p>
<p><span style="color:#0000ff;">    # Uncomment the following line to change the origin</span><br />
<span style="color:#0000ff;">    # (a.k.a. master) for the set.  The default is $MASTERNODE.</span><br />
<span style="color:#0000ff;">    #</span><br />
<span style="color:#0000ff;">    # &#8220;origin&#8221; =&gt; 1,</span></p>
<p><span style="color:#0000ff;">    # If this is set to 1, table and sequence names will be folded to lower-case</span><br />
<span style="color:#0000ff;">    # to match the way that PostgreSQL handles unquoted names.</span><br />
<span style="color:#0000ff;">    # For example, CREATE TABLE ACCOUNT(&#8230;) actually turns into CREATE TABLE account(&#8230;);</span><br />
<span style="color:#0000ff;">    # unless you put quotes around the table name</span><br />
<span style="color:#0000ff;">    # Slony always quotes object names, so you may get a mis-match between the table-name</span><br />
<span style="color:#0000ff;">    # as PostgreSQL understands it, and as Slony represents it.</span><br />
<span style="color:#0000ff;">    # default value is 0</span><br />
<span style="color:#0000ff;">    #</span><br />
<span style="color:#0000ff;">    # foldCase =&gt; 0,</span></p>
<p><span style="color:#0000ff;">    # The first ID to use for tables and sequences that are added</span><br />
<span style="color:#0000ff;">    # to the replication cluster.  This must be unique across the</span><br />
<span style="color:#0000ff;">    # cluster.</span><br />
<span style="color:#0000ff;">    # </span><br />
<span style="color:#0000ff;">    # TODO: This should be determined automatically, which can be</span><br />
<span style="color:#0000ff;">    # done fairly easily in most cases using psql.  create_set</span><br />
<span style="color:#0000ff;">    # should derive it, and give an option to override it with a</span><br />
<span style="color:#0000ff;">    # specific value.</span><br />
<span style="color:#0000ff;">    &#8221;table_id&#8221;    =&gt; 1,</span><br />
<span style="color:#0000ff;">    &#8221;sequence_id&#8221; =&gt; 1,</span></p>
<p><span style="color:#0000ff;">    # This array contains a list of tables that already have</span><br />
<span style="color:#0000ff;">    # primary keys.</span><br />
<span style="color:#0000ff;">        &#8220;pkeyedtables&#8221; =&gt; [</span><br />
<span style="color:#0000ff;">               'public.aree_ter',</span><br />
<span style="color:#0000ff;">               'public.astefer',</span><br />
<span style="color:#0000ff;">               'public.asteflu',</span><br />
<span style="color:#0000ff;">               'public.astevia',</span><br />
<span style="color:#0000ff;">               'public.cam_fabb',</span><br />
<span style="color:#0000ff;">               'public.curve',</span><br />
<span style="color:#0000ff;">               'public.discont',</span><br />
<span style="color:#0000ff;">               'public.ele_div',</span><br />
<span style="color:#0000ff;">               'public.err_l',</span><br />
<span style="color:#0000ff;">               'public.fabbr_l',</span><br />
<span style="color:#0000ff;">               'public.fabbric',</span><br />
<span style="color:#0000ff;">               'public.ferrovie',</span><br />
<span style="color:#0000ff;">               'public.geometry_columns',</span><br />
<span style="color:#0000ff;">               'public.idrogr_a',</span><br />
<span style="color:#0000ff;">               'public.idrograf',</span><br />
<span style="color:#0000ff;">               'public.infras_a',</span><br />
<span style="color:#0000ff;">               'public.infrastr',</span><br />
<span style="color:#0000ff;">               'public.inquadra',</span><br />
<span style="color:#0000ff;">               'public.lim_amm',</span><br />
<span style="color:#0000ff;">               'public.limamm_a',</span><br />
<span style="color:#0000ff;">               'public.nodofer',</span><br />
<span style="color:#0000ff;">               'public.nodoflu',</span><br />
<span style="color:#0000ff;">               'public.nodovia',</span><br />
<span style="color:#0000ff;">               'public.opere',</span><br />
<span style="color:#0000ff;">               'public.punti_q',</span><br />
<span style="color:#0000ff;">               'public.sim_disc',</span><br />
<span style="color:#0000ff;">               'public.sim_elem',</span><br />
<span style="color:#0000ff;">               'public.sim_fabb',</span><br />
<span style="color:#0000ff;">               'public.sim_idro',</span><br />
<span style="color:#0000ff;">               'public.sim_infr',</span><br />
<span style="color:#0000ff;">               'public.sim_oper',</span><br />
<span style="color:#0000ff;">               'public.sim_vege',</span><br />
<span style="color:#0000ff;">               'public.sim_viab',</span><br />
<span style="color:#0000ff;">               'public.spatial_ref_sys',</span><br />
<span style="color:#0000ff;">               'public.testi',</span><br />
<span style="color:#0000ff;">               'public.veget_a',</span><br />
<span style="color:#0000ff;">               'public.vegetaz',</span><br />
<span style="color:#0000ff;">               'public.viab_a',</span><br />
<span style="color:#0000ff;">               'public.viabilit',</span><br />
<span style="color:#0000ff;">               ],</span></p>
<p><span style="color:#0000ff;">    # For tables that have unique not null keys, but no primary</span><br />
<span style="color:#0000ff;">    # key, enter their names and indexes here.</span><br />
<span style="color:#0000ff;">    #&#8221;keyedtables&#8221; =&gt; {</span><br />
<span style="color:#0000ff;">    #    &#8216;table3&#8242; =&gt; &#8216;index_on_table3&#8242;,</span><br />
<span style="color:#0000ff;">    #    &#8216;table4&#8242; =&gt; &#8216;index_on_table4&#8242;,</span><br />
<span style="color:#0000ff;">    #},</span></p>
<p><span style="color:#0000ff;">    # If a table does not have a suitable key or set of keys that</span><br />
<span style="color:#0000ff;">    # can act as a primary key, Slony can add one.</span><br />
<span style="color:#0000ff;">    #</span><br />
<span style="color:#0000ff;">    # Note: The Slony development team does not recomment this</span><br />
<span style="color:#0000ff;">    # approach &#8212; you should create your own primary keys instead.</span><br />
<span style="color:#0000ff;">    # &#8220;serialtables&#8221; =&gt; ["table5"],</span></p>
<p><span style="color:#0000ff;">    # Sequences that need to be replicated should be entered here.</span><br />
<span style="color:#0000ff;">    #&#8221;sequences&#8221; =&gt; ['sequence1',</span><br />
<span style="color:#0000ff;">    #        'sequence2',</span><br />
<span style="color:#0000ff;">    #        ],</span><br />
<span style="color:#0000ff;">    },</span></p>
<p><span style="color:#0000ff;">};</span></p>
<p><span style="color:#0000ff;"># Keeping the following three lines for backwards compatibility in</span><br />
<span style="color:#0000ff;"># case this gets incorporated into a 1.0.6 release.</span><br />
<span style="color:#0000ff;">#</span><br />
<span style="color:#0000ff;"># TODO: The scripts should check for an environment variable</span><br />
<span style="color:#0000ff;"># containing the location of a configuration file.  That would</span><br />
<span style="color:#0000ff;"># simplify this configuration file and allow Slony tools to still work</span><br />
<span style="color:#0000ff;"># in situations where it doesn&#8217;t exist.</span><br />
<span style="color:#0000ff;">#</span><br />
<span style="color:#0000ff;">if ($ENV{&#8220;SLONYSET&#8221;}) {</span><br />
<span style="color:#0000ff;">    require $ENV{&#8220;SLONYSET&#8221;};</span><br />
<span style="color:#0000ff;">}</span></p>
<p><span style="color:#0000ff;"># Please do not add or change anything below this point.</span><br />
<span style="color:#0000ff;">1;</span></p>
<p>======================================================</p>
<p>Ho modificato il file di esempio togliendo le parti relative a &#8220;keyedtables&#8221; e &#8220;serialtables&#8221; e inserendo i nomi delle tabelle (con relativo schema) da replicare. Inoltre ho lasciato inalterate le impostazioni per &#8220;$CLUSTER_NAME = &#8216;replication&#8217;;&#8221; e &#8220;$LOGDIR = &#8216;/var/log/slony1&#8242;;&#8221;. La prima identificherà con un prefisso un nuovo schema nei due db e l&#8217;altra indica dove salvare i file di log.</p>
<p><strong>Configurazione di slonik</strong></p>
<p>Una volta editato il file di configurazione possiamo usalro per generare gli script da passare al modulo &#8220;slonik&#8221; (siamo sempre all&#8217;interno della  cirectory &#8220;/etc/slony/&#8221;).</p>
<p><span style="color:#0000ff;"># slonik_init_cluster &gt; initcluster</span></p>
<p><span style="color:#0000ff;"># slonik_create set 1 &gt; createset</span></p>
<p><span style="color:#0000ff;"># slonik_subscribe_set 1 2 &gt; subscribeset</span></p>
<p>In questo modo vengono creati 3 file ognuno dei quali contiene il codice per impostare un cluster e farlo partire.</p>
<p><strong>Accendere i motori</strong></p>
<p>Ora possiamo fare partire il tutto:</p>
<p><span style="color:#0000ff;"># slonik &lt; initcluster</span></p>
<p>che dovrebbe produrre un output simile a questo:</p>
<p><span style="color:#0000ff;">&lt;stdin&gt;:10: Set up replication nodes</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:13: Next: configure paths for each node/origin</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:16: Replication nodes prepared</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:17: Please start a slon replication daemon for each node</span></p>
<p><em>Può succedere che compaiano dei messaggi di errore (nel mio caso avevo scritto alcuni nomi di tabelle sbagliate nel file slon_tools.conf). In questo caso correggere il file suddetto, rimuovere i tre script creati con &#8220;<span style="color:#0000ff;"># rm initcluster createset subscribset</span>&#8220;, poi entrare dei due db &#8220;ctr_new&#8221; e &#8220;ctr_new_slave&#8221; e rimuovere lo schema &#8220;_replication&#8221; con &#8220;<span style="color:#0000ff;">=# DROP SCHEDA -replication CASCADE;</span>&#8220;. Infine ripartire con la creazione degli script di configurazione.</em></p>
<p>Avviamo slon sul server 1:</p>
<p><span style="color:#0000ff;"># slon_start 1</span></p>
<p><span style="color:#0000ff;">Invoke slon for node 1 &#8211; /usr/bin/slon -p /var/run/slony1/node1.pid -s 1000 -d2 replication &#8216;host=192.168.1.71 dbname=ctr_new user=postgres port=5432&#8242; &gt;&gt;/var/log/slony1/node1-ctr_new.log 2&gt;&amp;1 &lt;/dev/null &amp;</span><br />
<span style="color:#0000ff;">Slon successfully started for cluster replication, node node1</span><br />
<span style="color:#0000ff;">PID [5815]</span><br />
<span style="color:#0000ff;">Start the watchdog process as well&#8230;</span></p>
<p>e avviamo slon sul server 2:</p>
<p><span style="color:#0000ff;"># slon_start 2</span><br />
<span style="color:#0000ff;">Invoke slon for node 2 &#8211; /usr/bin/slon -p /var/run/slony1/node2.pid -s 1000 -d2 replication &#8216;host=100.0.4.71 dbname=ctr_new_slave user=postgres port=5432&#8242; &gt;&gt;/var/log/slony1/node2-ctr_new_slave.log 2&gt;&amp;1 &lt;/dev/null &amp;</span><br />
<span style="color:#0000ff;">Slon successfully started for cluster replication, node node2</span><br />
<span style="color:#0000ff;">PID [5879]</span><br />
<span style="color:#0000ff;">Start the watchdog process as well&#8230;</span></p>
<p>Ora creiamo cluster e subscribe</p>
<p><span style="color:#0000ff;"># slony &lt; createset</span></p>
<p><span style="color:#0000ff;">&lt;stdin&gt;:16: Subscription set 1 created</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:17: Adding tables to the subscription set</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:21: Add primary keyed table public.aree_ter</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:25: Add primary keyed table public.astefer</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:29: Add primary keyed table public.asteflu</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:33: Add primary keyed table public.astevia</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:37: Add primary keyed table public.cam_fabb</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:41: Add primary keyed table public.curve</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:45: Add primary keyed table public.discont</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:49: Add primary keyed table public.ele_div</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:53: Add primary keyed table public.err_l</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:57: Add primary keyed table public.fabbr_l</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:61: Add primary keyed table public.fabbric</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:65: Add primary keyed table public.ferrovie</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:69: Add primary keyed table public.geometry_columns</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:73: Add primary keyed table public.idrogr_a</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:77: Add primary keyed table public.idrograf</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:81: Add primary keyed table public.infras_a</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:85: Add primary keyed table public.infrastr</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:89: Add primary keyed table public.inquadra</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:93: Add primary keyed table public.lim_amm</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:97: Add primary keyed table public.limamm_a</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:101: Add primary keyed table public.nodofer</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:105: Add primary keyed table public.nodoflu</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:109: Add primary keyed table public.nodovia</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:113: Add primary keyed table public.opere</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:117: Add primary keyed table public.punti_q</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:121: Add primary keyed table public.sim_disc</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:125: Add primary keyed table public.sim_elem</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:129: Add primary keyed table public.sim_fabb</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:133: Add primary keyed table public.sim_idro</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:137: Add primary keyed table public.sim_infr</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:141: Add primary keyed table public.sim_oper</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:145: Add primary keyed table public.sim_vege</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:149: Add primary keyed table public.sim_viab</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:153: Add primary keyed table public.spatial_ref_sys</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:157: Add primary keyed table public.testi</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:161: Add primary keyed table public.veget_a</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:165: Add primary keyed table public.vegetaz</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:169: Add primary keyed table public.viab_a</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:173: Add primary keyed table public.viabilit</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:176: Adding sequences to the subscription set</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:177: All tables added</span></p>
<p>Ed infine:</p>
<p><span style="color:#0000ff;"># slony &lt; subscribeset</span></p>
<p><span style="color:#0000ff;">&lt;stdin&gt;:4: NOTICE:  subscribe set: omit_copy=f</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:4: NOTICE:  subscribe set: omit_copy=f</span><br />
<span style="color:#0000ff;">CONTEXT:  SQL statement &#8220;SELECT  &#8220;_replication&#8221;.subscribeSet_int( $1 ,  $2 ,  $3 ,  $4 ,  $5 )&#8221;</span><br />
<span style="color:#0000ff;">funzione PL/pgSQL &#8220;subscribeset&#8221; linea 68 a PERFORM</span><br />
<span style="color:#0000ff;">&lt;stdin&gt;:10: Subscribed nodes to set 1</span></p>
<p>Tutto è partito: se andiamo a vedere i file di log in &#8220;/var/log/slony/&#8221; vediamo cio&#8217; che accade.</p>
<p>Per fare un test ho provato a caricare la stessa tabella (spaziale) in QGIS (la stessa tabella del db master e dello slave). Modificando (aggiunto un elemento geometrico) la tabella e facendo un refresh si notano quasi istantaneamenete i cambiamenti replicati anche nel db slave!</p>
<p>Ogni commento è benvenuto.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/flaviorigolon.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/flaviorigolon.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/flaviorigolon.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/flaviorigolon.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/flaviorigolon.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/flaviorigolon.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/flaviorigolon.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/flaviorigolon.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/flaviorigolon.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/flaviorigolon.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/flaviorigolon.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/flaviorigolon.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/flaviorigolon.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/flaviorigolon.wordpress.com/973/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=973&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mapfreely.org/2012/05/25/slony-replicare-db-postgresql-postgis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>45.580163 11.517611</georss:point>
		<geo:lat>45.580163</geo:lat>
		<geo:long>11.517611</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fcb187d8245fbbcfdbaedd43f9b28f5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">flaviorigolon</media:title>
		</media:content>
	</item>
		<item>
		<title>qualche tips su django</title>
		<link>http://mapfreely.org/2012/05/24/qualche-tips-su-django/</link>
		<comments>http://mapfreely.org/2012/05/24/qualche-tips-su-django/#comments</comments>
		<pubDate>Thu, 24 May 2012 12:21:15 +0000</pubDate>
		<dc:creator>flaviorigolon</dc:creator>
				<category><![CDATA[db-ing & geodb-ing]]></category>
		<category><![CDATA[linuxing]]></category>
		<category><![CDATA[django]]></category>

		<guid isPermaLink="false">http://mapfreely.org/?p=965</guid>
		<description><![CDATA[Rimozione django Per rimuovere django installato da sorgenti (nel caso si voglia installare una versione piu&#8217; recente, per esempio) basta trovare la directory &#8220;django&#8221; e cancellarla. Per trovarla impartire il comando: sit@debian:~$ python -c &#8220;import sys; sys.path = sys.path[1:]; import django; print(django.__path__)&#8221; che nel mio caso restituisce: ['/usr/lib/pymodules/python2.6/django'] MD_PYTHON ERROR in django Dopo un blocco [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=965&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Rimozione django</strong></p>
<p>Per rimuovere django installato da sorgenti (nel caso si voglia installare una versione piu&#8217; recente, per esempio) basta trovare la directory &#8220;django&#8221; e cancellarla. Per trovarla impartire il comando:</p>
<p><span style="color:#0000ff;">sit@debian:~$ python -c &#8220;import sys; sys.path = sys.path[1:]; import django; print(django.__path__)&#8221;</span></p>
<p>che nel mio caso restituisce:</p>
<p><span style="color:#0000ff;">['/usr/lib/pymodules/python2.6/django']</span></p>
<p><strong>MD_PYTHON ERROR in django</strong></p>
<p>Dopo un blocco inaspettato del server (durante un processo di rsync) il gestionale django installato riportava il seguente errore:</p>
<p><span style="color:#0000ff;">MOD_PYTHON ERROR</span></p>
<p><span style="color:#0000ff;">&#8230;&#8230;&#8230;&#8230;..</span></p>
<p><span style="color:#0000ff;">&#8230;&#8230;&#8230;&#8230;..</span></p>
<p><span style="color:#0000ff;">Import Error: Could not import settings &#8216;my_app.settings&#8217; (Is it on sys.psth? Does it have syntax error?): No module named myapp.settings</span></p>
<p>Dopo avere cercato in rete ho trovato che la causa di questo messaggio potrebbe essere:</p>
<p>- file di configurazione di apache errato;</p>
<p>- sys.path sbagliato;</p>
<p>- permessi non corretti su cartelle e files del progetto (permessi che inibiscono all&#8217;utente www-data di leggere i file di settings);</p>
<p>- bug nel codice django.</p>
<p>Prima di procedere ho provato a replicare l&#8217;aplicativo sul portatile (compreso db postgresql colllegato) e tutto funzionava a modino (NB: stesso SO Debian stable).</p>
<p>Quindi ho confrotato il file di configurazione di apache (/etc/apache2/apache2.conf&#8221;) e sono identici; quindi il problema non sta li;</p>
<p>ho confrontato il sys.path delle due macchine: per farlo ho lanciato una shell python, poi:</p>
<p><span style="color:#0000ff;">&gt;&gt;&gt; import os, sys</span></p>
<p><span style="color:#0000ff;">&gt;&gt;&gt; print sys.path</span></p>
<p>ed i risultati sono identici: quindi anche la seconda ipotesi e&#8217; scartata.</p>
<p>Anticipo che il bug nel codice django e&#8217; da escludere a priori visto che sul portatile gira senza problemi. Rimangono da verificare i permessi sulle cartelle del progetto.</p>
<p>Infatti confrontando i listati di &#8220;ls -l&#8221; sulle due macchine si nota che la directory &#8220;/home/user/&#8221; ha dei permessi differenti (nel server e&#8217; inibita la lettura a tutti. Molto probabilmente durnate l&#8217;operazione di rsync lanciato da root ha modificato i diritti di accesso durante; il blocco del server causato da un down temporaneo della rete ha messo in lock anche le directory interessate). Cambiando questa impostazione con:</p>
<p><span style="color:#0000ff;">$ chmod 751 -R /home/user/</span></p>
<p>tutto e&#8217; andato a posto</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/flaviorigolon.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/flaviorigolon.wordpress.com/965/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/flaviorigolon.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/flaviorigolon.wordpress.com/965/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/flaviorigolon.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/flaviorigolon.wordpress.com/965/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/flaviorigolon.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/flaviorigolon.wordpress.com/965/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/flaviorigolon.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/flaviorigolon.wordpress.com/965/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/flaviorigolon.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/flaviorigolon.wordpress.com/965/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/flaviorigolon.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/flaviorigolon.wordpress.com/965/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=965&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mapfreely.org/2012/05/24/qualche-tips-su-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>45.580163 11.517611</georss:point>
		<geo:lat>45.580163</geo:lat>
		<geo:long>11.517611</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fcb187d8245fbbcfdbaedd43f9b28f5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">flaviorigolon</media:title>
		</media:content>
	</item>
		<item>
		<title>Da Postgresql 8.3 e Postgis 1.3.3 a Posgresql 8.4.11 e Postgis1.5.1 su Debian stable</title>
		<link>http://mapfreely.org/2012/05/24/da-postgresql-8-3-e-postgis-1-3-3-a-posgresql-8-4-11-e-postgis1-5-1-su-debian-stable/</link>
		<comments>http://mapfreely.org/2012/05/24/da-postgresql-8-3-e-postgis-1-3-3-a-posgresql-8-4-11-e-postgis1-5-1-su-debian-stable/#comments</comments>
		<pubDate>Thu, 24 May 2012 11:16:06 +0000</pubDate>
		<dc:creator>flaviorigolon</dc:creator>
				<category><![CDATA[db-ing & geodb-ing]]></category>
		<category><![CDATA[linuxing]]></category>
		<category><![CDATA[mapping]]></category>

		<guid isPermaLink="false">http://mapfreely.org/?p=959</guid>
		<description><![CDATA[Con questo post volevo tenere traccia della procedura di aggiornamento e migrazione dati da Postgresql 8.3 e Postgis 1.3.3 a Posgresql 8.4.11 e Postgis1.5.1. Ho seguito questa utilissima pagina wiki Sul nostro server &#8220;girano&#8221; attualmente Postgresql 8.3 e Postgis 1.3.3. 1- Facciamo dapprima il backup dei database presenti (il comando va lanciato per ogni db [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=959&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Con questo post volevo tenere traccia della procedura di aggiornamento e migrazione dati da Postgresql 8.3 e Postgis 1.3.3 a Posgresql 8.4.11 e Postgis1.5.1.</p>
<p>Ho seguito questa utilissima pagina <a title="debian wiki upgrade postgresql/postgis" href="http://wiki.debian.org/DebianGis/UpdatingPostGIS">wiki</a></p>
<p>Sul nostro server &#8220;girano&#8221; attualmente Postgresql 8.3 e Postgis 1.3.3.</p>
<p>1- Facciamo dapprima il backup dei database presenti (il comando va lanciato per ogni db presente nel cluster).</p>
<p><span style="color:#0000ff;">$ PGUSER=postgres pg_dump -Fc nome_db &gt; /percorso/alla/dir/di/dump/nome_db.dmp</span></p>
<p>NB: pg_dump con l&#8217;opzione -Fc crea un archivio compresso (un tar compresso con gzip, ovvero un tar.gz).</p>
<p>Nel caso si trattasse di db non spaziale e&#8217; sufficiente dare:</p>
<p><span style="color:#0000ff;">$ PGUSER=postgres pg_dump -c nome_db &gt; /percorso/alla/dir/di/dump/nome_db.sql</span></p>
<p>2- Stoppiamo Postgresql-8.3 (come root):</p>
<p><span style="color:#0000ff;"># /etc/init.d/postgesql stop 8.3</span></p>
<p>3- Installiamo Postgresql-8.4 e Postgis-1.5</p>
<p><span style="color:#0000ff;"># aptitude install postgresql-8.4 postgresql-8.4-postgis</span></p>
<p>A questo punto (non ricordo purtroppo tutte le fasi che ho percorso) al comando di stop de nuovo postgresql-8-4 compariva un errore. Ho provato a reinstallarlo ma a questo punto ottengo:</p>
<p><span style="color:#0000ff;"># Error: move_conffile: required configuration file /var/lib/postgresql/8.4/main/postgresql.conf does not exists.</span></p>
<p>Decido allora di reinstallare tutto ma succede il fattaccio. Non si riesce piu&#8217; a lanciare postgresql-8-3. Il messaggio d&#8217;errore diceva che non esiste piu&#8217; la directory &#8220;/var/lib/postgresql/8.3/main&#8221; panic&#8230;..praticamente mi e&#8217; sparito tutto il cluster di postgresql-8.3, fumato!</p>
<p>Ok, pero&#8217; i backup li ho e decido di fare un purge profondo prima di ripartire. Cerco tutti i pacchetti relativi a Postgresql.</p>
<p><span style="color:#0000ff;"># dpkg -l | grep postg</span></p>
<p>e rimuovo tutto con:</p>
<p><span style="color:#0000ff;"># aptitude purge postgresql-8.3 postgresq-8.4 postgresql-client-8.3 postgresql-client-8.4 postgresql-client-common postgresql-common postgresql</span></p>
<p>Rimuovo anche tutte le directory di sistema:</p>
<p><span style="color:#0000ff;"># rm -r /etc/postgresql/</span></p>
<p><span style="color:#0000ff;"># rm -r /etc/postgresql-common/</span></p>
<p><span style="color:#0000ff;"># rm -r /var/lib/postgresql/</span></p>
<p>poi togliamo manualmente l&#8217;utente &#8220;postgres&#8221; dal file &#8220;/etc/passwd&#8221; (mediante &#8220;<span style="color:#0000ff;"># nano /etc/passwd</span>&#8221; e modificando il file eliminado la riga di interesse).</p>
<p>Quindi reinstallo tutto con:</p>
<p><span style="color:#0000ff;"># aptitude install postgresql-8.4 postgresql-8.4-postgis <span style="color:#000000;">(che si tira dietro anche tutte le dipendenze del caso)</span></span></p>
<p><span style="color:#0000ff;"><span style="color:#000000;">A questo punto possiamo recuperare i dump fatti. Per fare questo ci viene in aiuto uno script in perl che si installa con postgis-1.5 (new_postgis_restore.pl)</span>.</span></p>
<p><span style="color:#0000ff;"><span style="color:#000000;">Prima si devono ricreare i database vuoti (con lo stesso nome di quello di partenza). Essendo tutti db spaziali creiamo dapprima un template spaziale che chiamiamo &#8220;template_gis&#8221; e lo useremo poi per creare ogni db.</span></span></p>
<p><span style="color:#000000;">Come utente postgres creiamo anche gli utenti dei db stessi:</span></p>
<p><span style="color:#0000ff;">$ su</span></p>
<p><span style="color:#0000ff;"># su postgres</span></p>
<p>(come utente postgres) # <span style="color:#0000ff;">psql template1;</span> (si entra in un db qualsiasi per creare gli utenti)</p>
<p><span style="color:#0000ff;">=# CREATE USER nome_utente WITH PASSWORD &#8216;secret&#8217; CREATEDB CREATEUSER;</span></p>
<p>Creo il nuovo database che diventaera&#8217; il template (sempre come utente postgres):</p>
<p><span style="color:#0000ff;">=# CREATE DATABASE template_gis template=template0;</span></p>
<p>Usciamo dal db (&lt;CTRL&gt;d) e (sempre come utente postgres) importiamo in esso le funzioni spaziali:</p>
<p><span style="color:#0000ff;"># psql -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql -d template_gis<br />
</span></p>
<p>poi</p>
<p><span style="color:#0000ff;"># psql -d template_gis -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql</span></p>
<p>A questo punto rientriamo in template1:</p>
<p><span style="color:#0000ff;"># psql template1;</span></p>
<p>e facciamo in modo che il nuovo db sia un template usabile in futuro:</p>
<p><span style="color:#0000ff;"># UPDATE pg_database SET datistemplate=&#8217;t&#8217; WHERE datname=&#8217;template_gis&#8217;;</span></p>
<p>ok, ora possiamo creare tutti i nostri db in base a questo template.</p>
<p><span style="color:#0000ff;"># CREATE DATABASE nome_db template=template_gis OWNER nome_utente;</span> (questo va fattoper ogni db)</p>
<p>Quindi popoliamo i db con lo script perl citato prima (come utente normale):</p>
<p><span style="color:#0000ff;">$ /usr/share/postgresql/8.4/utils/new_postgis_restore.pl  /percorso/alla/dir/di/dump/nome_db.dmp | psql nome_db</span></p>
<p>Vedremo scorrere sul terminale una serie di istruzioni (il db si sta popolando). Fatto.</p>
<p><span style="color:#0000ff;"><span style="color:#000000;">Alla fine (nel mio caso) ricordarsi di modificare i file &#8220;/etc/postgresql/8.4/main/postgresql.conf&#8221; e &#8220;/etc/postgresql/8.4/main/pg_hba.conf&#8221;.</span></span></p>
<p>Per il primo decommentare la riga relativa a &#8220;listen_addresses&#8221; e inserire l&#8217;asterisco al posto di &#8220;localhost&#8221; come riportato:</p>
<p><span style="color:#0000ff;">#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</span><br />
<span style="color:#0000ff;"># CONNECTIONS AND AUTHENTICATION</span><br />
<span style="color:#0000ff;">#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</span></p>
<p><span style="color:#0000ff;"># &#8211; Connection Settings -</span></p>
<p><span style="color:#0000ff;">listen_addresses = &#8216;*&#8217;                  # what IP address(es) to listen on;</span></p>
<p><span style="color:#0000ff;">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</span></p>
<p>Per il secondo (nella parte finale del file):</p>
<p><span style="color:#0000ff;"># Database administrative login by UNIX sockets</span><br />
<span style="color:#0000ff;">local   all         postgres                          ident</span></p>
<p><span style="color:#0000ff;"># TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD</span></p>
<p><span style="color:#0000ff;"># &#8220;local&#8221; is for Unix domain socket connections only</span><br />
<span style="color:#0000ff;">local   all         all                               trust</span><br />
<span style="color:#0000ff;"># IPv4 local connections:</span><br />
<span style="color:#0000ff;">host    all         all         127.0.0.1/32          trust</span><br />
<span style="color:#0000ff;">host    all         all         0.0.0.0/0             trust</span><br />
<span style="color:#0000ff;"># IPv6 local connections:</span><br />
<span style="color:#0000ff;">host    all         all         ::1/128               trust</span></p>
<p>altrimenti non sono consentiti connessioni da altri client (nel primo file) e l&#8217;esecuzione di pg_dumpall (nel secondo file)</p>
<p><span style="color:#0000ff;"><br />
</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/flaviorigolon.wordpress.com/959/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/flaviorigolon.wordpress.com/959/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/flaviorigolon.wordpress.com/959/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/flaviorigolon.wordpress.com/959/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/flaviorigolon.wordpress.com/959/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/flaviorigolon.wordpress.com/959/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/flaviorigolon.wordpress.com/959/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/flaviorigolon.wordpress.com/959/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/flaviorigolon.wordpress.com/959/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/flaviorigolon.wordpress.com/959/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/flaviorigolon.wordpress.com/959/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/flaviorigolon.wordpress.com/959/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/flaviorigolon.wordpress.com/959/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/flaviorigolon.wordpress.com/959/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=959&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mapfreely.org/2012/05/24/da-postgresql-8-3-e-postgis-1-3-3-a-posgresql-8-4-11-e-postgis1-5-1-su-debian-stable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>45.580163 11.517611</georss:point>
		<geo:lat>45.580163</geo:lat>
		<geo:long>11.517611</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fcb187d8245fbbcfdbaedd43f9b28f5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">flaviorigolon</media:title>
		</media:content>
	</item>
		<item>
		<title>linux &#124; qualche tip, qualche trick&#8230;</title>
		<link>http://mapfreely.org/2012/04/05/linux-qualche-tip-qualche-trick/</link>
		<comments>http://mapfreely.org/2012/04/05/linux-qualche-tip-qualche-trick/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 12:03:22 +0000</pubDate>
		<dc:creator>flaviorigolon</dc:creator>
				<category><![CDATA[linuxing]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[lowercase]]></category>

		<guid isPermaLink="false">http://mapfreely.org/?p=952</guid>
		<description><![CDATA[rename comando per rinominare uno o piu&#8217; file; in particolare mi e&#8217; tornato utile per rinominare una serie di immagini che presentavano alcune lettere maiuscuole, altre minuscole. Per riportare tutto a minuscolo: $ rename &#8216;y/A-Z/a-z/&#8217; * In questo modo tutti i file presenti nella dir corrente vengono trattati e rinominati in lowercase.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=952&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>rename</strong></p>
<p>comando per rinominare uno o piu&#8217; file; in particolare mi e&#8217; tornato utile per rinominare una serie di immagini che presentavano alcune lettere maiuscuole, altre minuscole. Per riportare tutto a minuscolo:</p>
<p><span style="color:#0000ff;">$ rename &#8216;y/A-Z/a-z/&#8217; *</span></p>
<p>In questo modo tutti i file presenti nella dir corrente vengono trattati e rinominati in lowercase.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/flaviorigolon.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/flaviorigolon.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/flaviorigolon.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/flaviorigolon.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/flaviorigolon.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/flaviorigolon.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/flaviorigolon.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/flaviorigolon.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/flaviorigolon.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/flaviorigolon.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/flaviorigolon.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/flaviorigolon.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/flaviorigolon.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/flaviorigolon.wordpress.com/952/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=952&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mapfreely.org/2012/04/05/linux-qualche-tip-qualche-trick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>45.580163 11.517611</georss:point>
		<geo:lat>45.580163</geo:lat>
		<geo:long>11.517611</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fcb187d8245fbbcfdbaedd43f9b28f5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">flaviorigolon</media:title>
		</media:content>
	</item>
		<item>
		<title>primo script in python &#124; da gradi sessagesimali a gradi decimali</title>
		<link>http://mapfreely.org/2012/03/19/primo-script-in-python-da-gradi-sessagesimali-a-gradi-decimali/</link>
		<comments>http://mapfreely.org/2012/03/19/primo-script-in-python-da-gradi-sessagesimali-a-gradi-decimali/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 08:51:30 +0000</pubDate>
		<dc:creator>flaviorigolon</dc:creator>
				<category><![CDATA[linuxing]]></category>
		<category><![CDATA[mapping]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://mapfreely.org/?p=944</guid>
		<description><![CDATA[Pubblico il mio primo timido script &#8220;operativo &#8221; in python. E&#8217; frutto di un misto tra studio e tentativi vari spulciando tutorial in rete, un piccolo pocket libro e il famoso &#8220;diveintopython&#8221; . Il lavoro che presento è l&#8217;evoluzione del piccolo script che, attendendo gli input dell&#8217;utente, converte i gradi, primi e secondi di un [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=944&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Pubblico il mio primo timido script &#8220;operativo &#8221; in python. E&#8217; frutto di un misto tra studio e tentativi vari spulciando tutorial in rete, un piccolo pocket libro e il famoso &#8220;diveintopython&#8221; <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Il lavoro che presento è l&#8217;evoluzione del piccolo script che, attendendo gli input dell&#8217;utente, converte i gradi, primi e secondi di un angolo in formato sessagesimale (una coordinata geografica in lat-lon per esempio) in formaro decimale (molto utile per l&#8217;elaborazione in molti programmi GIS).</p>
<p>In questo secondo step invece viene letto un file in formato .CSV contenente gli angoli nel formato gradi, primi, secondi (con la virgola come separatore) e viene generato un nuovo file (.CSV) con gli angoli convertiti nella forma decomale. Ecco lo script:</p>
<p>========================</p>
<p><span style="color:#ff6600;">from</span> __future__ <span style="color:#ff6600;">import</span> division<br />
angoli= <span style="color:#800080;">open</span>( <span style="color:#008000;">&#8220;/home/sit/python/angoli.txt&#8221;</span>, <span style="color:#008000;">&#8220;r&#8221;</span> ) # apre in lettura il file che contiene gli angoli da elaborare<br />
angoli_trasformati=<span style="color:#800080;">open</span>(<span style="color:#008000;">&#8220;/home/sit/python/angoli_trasformati.txt&#8221;</span>, <span style="color:#008000;">&#8220;w&#8221;</span>) # genera un nuovo file che conterra&#8217; i risultati<br />
<span style="color:#ff6600;">for</span> angolo <span style="color:#ff6600;">in</span> angoli:<br />
<span style="color:#ff6600;">try</span>:<br />
g, p, s = angolo.strip().split( &#8220;,&#8221; ) # crea una tupla eliminando eventuali spazi tra valori e separandoli (i valori) con una virgola &#8220;,&#8221;<br />
res =  <span style="color:#800080;">float</span>(g), <span style="color:#800080;">float</span>(p), <span style="color:#800080;">float</span>(s), (<span style="color:#800080;">float</span>(g)+(((<span style="color:#800080;">float</span>(s)/60)+<span style="color:#800080;">float</span>(p))/60)) # calcola il valore dell&#8217;angolo in formato decimale<br />
<span style="color:#800080;">print</span> res<br />
<span style="color:#800080;">print</span>&gt;&gt;angoli_trasformati, res # restituisce l&#8217;output sul file creato in precedenza<br />
<span style="color:#ff6600;">except</span> <span style="color:#800080;">ValueError</span>:<br />
<span style="color:#ff6600;">pass</span><br />
<span style="color:#000000;">angoli.close() # chiude lo stat sul file aperto</span><br />
<span style="color:#000000;">angoli_trasformati.close() # chiude lo stat sul file generato<br />
</span></p>
<p>========================</p>
<p>ogni commento e&#8217; benvenuto</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/flaviorigolon.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/flaviorigolon.wordpress.com/944/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/flaviorigolon.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/flaviorigolon.wordpress.com/944/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/flaviorigolon.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/flaviorigolon.wordpress.com/944/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/flaviorigolon.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/flaviorigolon.wordpress.com/944/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/flaviorigolon.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/flaviorigolon.wordpress.com/944/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/flaviorigolon.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/flaviorigolon.wordpress.com/944/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/flaviorigolon.wordpress.com/944/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/flaviorigolon.wordpress.com/944/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=944&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mapfreely.org/2012/03/19/primo-script-in-python-da-gradi-sessagesimali-a-gradi-decimali/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>45.580163 11.517611</georss:point>
		<geo:lat>45.580163</geo:lat>
		<geo:long>11.517611</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fcb187d8245fbbcfdbaedd43f9b28f5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">flaviorigolon</media:title>
		</media:content>
	</item>
		<item>
		<title>il primo &#8220;hello world&#8221; in python</title>
		<link>http://mapfreely.org/2012/03/08/il-primo-hello-world-in-python/</link>
		<comments>http://mapfreely.org/2012/03/08/il-primo-hello-world-in-python/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 11:41:30 +0000</pubDate>
		<dc:creator>flaviorigolon</dc:creator>
				<category><![CDATA[linuxing]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://mapfreely.org/?p=933</guid>
		<description><![CDATA[A distanza di qualche mese mi sono riavvicinato alla programmazione (una espressione &#8220;grossa&#8221; per me) tentando di rifare un esperimento: convertire un angolo dal formato gradi primi secondi a decimale. Riporto il codice python: gradi = input(&#8216;scrivi i gradi: &#8216;) primi = input(&#8216;scrivi i primi: &#8216;) secondi = input(&#8216;scrivi i secondi: &#8216;) print &#8220;l&#8217;angolo in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=933&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"><a href="http://flaviorigolon.files.wordpress.com/2012/03/logo_python.jpeg"><img class="aligncenter  wp-image-950" title="logo_python" src="http://flaviorigolon.files.wordpress.com/2012/03/logo_python.jpeg?w=157&h=157" alt="python logo" width="157" height="157" /></a></p>
<p>A distanza di qualche mese mi sono riavvicinato alla programmazione (una espressione &#8220;grossa&#8221; per me) tentando di rifare un esperimento: convertire un angolo dal formato gradi primi secondi a decimale.</p>
<p>Riporto il codice python:</p>
<p>gradi = <span style="color:#008000;">input</span>(<span style="color:#ff00ff;">&#8216;scrivi i gradi: &#8216;</span>)<br />
primi = <span style="color:#008000;">input</span>(<span style="color:#ff00ff;">&#8216;scrivi i primi: &#8216;</span>)<br />
secondi = <span style="color:#008000;">input</span>(<span style="color:#ff00ff;">&#8216;scrivi i secondi: &#8216;</span>)<br />
<strong><span style="color:#800000;">print</span></strong> <span style="color:#ff00ff;">&#8220;l&#8217;angolo in formato decimale e&#8217;&#8221;</span>,<span style="color:#008000;">float</span>(gradi)+(((<span style="color:#008000;">float</span>(secondi)/<span style="color:#ff00ff;">60</span>)+<span style="color:#008000;">float</span>(primi))/<span style="color:#ff00ff;">60</span>)</p>
<p>[per evitare di dichiarare ogni input come float() si puo' importare il modulo divisione; ecco il codice modificato:</p>
<p><span style="color:#800080;">from</span> __future__ <span style="color:#800080;">import</span> division<br />
gradi = <span style="color:#008000;">input</span>(<span style="color:#ff00ff;">'scrivi i gradi: '</span>)<br />
primi = <span style="color:#008000;">input</span>(<span style="color:#ff00ff;">'scrivi i primi: '</span>)<br />
secondi = <span style="color:#008000;">input</span>(<span style="color:#ff00ff;">'scrivi i secondi: '</span>)<br />
print <span style="color:#ff00ff;">"l'angolo in formato decimale e'"</span>,gradi+(((secondi/<span style="color:#ff00ff;">60</span>)+primi)/<span style="color:#ff00ff;">60</span>)</p>
<p>il risultato non cambia]</p>
<p>salvandolo in un file che potermmo chiamare dms2dd.py ed eseguendolo otterremo quanto richiesto:</p>
<p>$ python2.7 dms2dd.py<br />
scrivi i gradi: 45<br />
scrivi i primi: 5<br />
scrivi i secondi: 5<br />
l&#8217;angolo in formato decimale e&#8217; 45.0847222222</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/flaviorigolon.wordpress.com/933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/flaviorigolon.wordpress.com/933/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/flaviorigolon.wordpress.com/933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/flaviorigolon.wordpress.com/933/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/flaviorigolon.wordpress.com/933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/flaviorigolon.wordpress.com/933/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/flaviorigolon.wordpress.com/933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/flaviorigolon.wordpress.com/933/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/flaviorigolon.wordpress.com/933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/flaviorigolon.wordpress.com/933/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/flaviorigolon.wordpress.com/933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/flaviorigolon.wordpress.com/933/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/flaviorigolon.wordpress.com/933/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/flaviorigolon.wordpress.com/933/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=933&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mapfreely.org/2012/03/08/il-primo-hello-world-in-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>45.580163 11.517611</georss:point>
		<geo:lat>45.580163</geo:lat>
		<geo:long>11.517611</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fcb187d8245fbbcfdbaedd43f9b28f5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">flaviorigolon</media:title>
		</media:content>

		<media:content url="http://flaviorigolon.files.wordpress.com/2012/03/logo_python.jpeg" medium="image">
			<media:title type="html">logo_python</media:title>
		</media:content>
	</item>
		<item>
		<title>postgresql &#124; qualche tips, qualche tricks</title>
		<link>http://mapfreely.org/2012/01/13/postgresql-qualche-tips-qualche-tricks/</link>
		<comments>http://mapfreely.org/2012/01/13/postgresql-qualche-tips-qualche-tricks/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 16:45:36 +0000</pubDate>
		<dc:creator>flaviorigolon</dc:creator>
				<category><![CDATA[db-ing & geodb-ing]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://mapfreely.org/?p=909</guid>
		<description><![CDATA[Posto alcuni comandi pgsql che ho avuto modo di usare di recente dovendo maneggiare i formati date di Postgresql. Li metto cosi&#8217; in ordine sparso e premetto che fanno riferimento ad un database usato per la gestione dei consumi energetici di impianti di illuminazione; pertanto alcuni commenti (personali) fanno riferimento a questo tipo di lavoro. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=909&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Posto alcuni comandi pgsql che ho avuto modo di usare di recente dovendo maneggiare i formati date di Postgresql. Li metto cosi&#8217; in ordine sparso e premetto che fanno riferimento ad un database usato per la gestione dei consumi energetici di impianti di illuminazione; pertanto alcuni commenti (personali) fanno riferimento a questo tipo di lavoro. Tuttavia vanno benissimo per qualsiasi altro db.</p>
<p>Sia data una tabella &#8220;tbl01&#8243; che contiene un campo &#8220;anno&#8221; come stringa, &#8220;data01&#8243;, &#8220;data02&#8243;, &#8220;data03&#8243;, &#8221;data04&#8243; campi in formato date, &#8220;consumo_anno&#8221; come integer :</p>
<p># comando SELECT per recuperare il valore del campo &#8220;anno&#8221; sul quale faremo le nostre operazioni:</p>
<p><span style="color:#0000ff;">mydb=# SELECT anno FROM tbl01 WHERE id=4;</span><br />
<span style="color:#0000ff;"> anno </span><br />
<span style="color:#0000ff;">&#8212;&#8212;</span><br />
<span style="color:#0000ff;"> 2010</span><br />
<span style="color:#0000ff;">(1 row)</span></p>
<p>Come si puo&#8217; vedere si tratta di un campo varchar di 4 caratteri.</p>
<p># comando SELECT che converte in numero (attualmente in formato testo) il campo &#8220;anno&#8221; della tabella &#8220;tbl01&#8243;:</p>
<p><span style="color:#0000ff;">mydb=# SELECT to_number(anno, &#8217;9999&#8242;) FROM tbl01 WHERE id=4;</span><br />
<span style="color:#0000ff;"> to_number </span><br />
<span style="color:#0000ff;">&#8212;&#8212;&#8212;&#8211;</span><br />
<span style="color:#0000ff;">      2010</span><br />
<span style="color:#0000ff;">(1 row)</span></p>
<p># comando SELECT per convertire in numero il campo &#8220;anno&#8221; e togliere 1:</p>
<p><span style="color:#0000ff;">mydb=# SELECT to_number(anno, &#8217;9999&#8242;)-1 FROM tbl01;</span><br />
<span style="color:#0000ff;"> ?column? </span><br />
<span style="color:#0000ff;">&#8212;&#8212;&#8212;-</span><br />
<span style="color:#0000ff;">     2009</span><br />
<span style="color:#0000ff;">     2009</span><br />
<span style="color:#0000ff;">     2008</span><br />
<span style="color:#0000ff;">     2009</span><br />
<span style="color:#0000ff;">(4 rows)</span></p>
<p># comando per convertire in data nel formato YYYYMMDD il valore del campo &#8220;anno&#8221;:</p>
<p><span style="color:#0000ff;">mydb=# SELECT to_date(anno,&#8217;YYYYMMDD&#8217;) FROM tbl01 WHERE id=4;</span><br />
<span style="color:#0000ff;">  to_date   </span><br />
<span style="color:#0000ff;">&#8212;&#8212;&#8212;&#8212;</span><br />
<span style="color:#0000ff;"> 2010-01-01</span><br />
<span style="color:#0000ff;">(1 row)</span></p>
<p># calcolo del 31 dicembre dell&#8217;anno precedente a quello in oggetto (con riferimento al campo &#8220;anno&#8221;):</p>
<p><span style="color:#0000ff;">mydb=# SELECT to_date(anno,&#8217;YYYYMMDD&#8217;)-1 FROM tbl01;</span><br />
<span style="color:#0000ff;">  ?column?  </span><br />
<span style="color:#0000ff;">&#8212;&#8212;&#8212;&#8212;</span><br />
<span style="color:#0000ff;"> 2009-12-31</span><br />
<span style="color:#0000ff;"> 2009-12-31</span><br />
<span style="color:#0000ff;"> 2008-12-31</span><br />
<span style="color:#0000ff;"> 2009-12-31</span><br />
<span style="color:#0000ff;">(4 rows)</span></p>
<p># comando per calcolare la differenza tra una data chiamata &#8220;data1&#8243; (inizio anno) e il 31 dicembre dell&#8217;anno precedente (giorni in eccesso inizio anno): siano data0=2008-12-29, data1=2009-01-12, data2=2009-12-31, data3=2009-12-31.</p>
<p><span style="color:#0000ff;">mydb=# SELECT data1-(to_date(anno,&#8217;YYYYMMDD&#8217;)-1) FROM tbl01 WHERE id=4;</span><br />
<span style="color:#0000ff;"> ?column? </span><br />
<span style="color:#0000ff;">&#8212;&#8212;&#8212;-</span><br />
<span style="color:#0000ff;">       12</span><br />
<span style="color:#0000ff;">(1 row)</span></p>
<p># comando per calcolare la differenza tra il 31 dicembre dell&#8217;anno precedente e la prima data &#8220;data0&#8243; (giorni in difetto inizio anno):</p>
<p><span style="color:#0000ff;">mydb=# SELECT (to_date(anno,&#8217;YYYYMMDD&#8217;)-1)-data0 FROM tbl01 WHERE id=4;</span><br />
<span style="color:#0000ff;"> ?column? </span><br />
<span style="color:#0000ff;">&#8212;&#8212;&#8212;-</span><br />
<span style="color:#0000ff;">        2</span><br />
<span style="color:#0000ff;">(1 row)</span></p>
<p># comando per calcolare la differenza tra &#8220;data3&#8243; e il 31 dicembre dell&#8217;anno in corso (giorni in eccesso fine anno):</p>
<p><span style="color:#0000ff;">mydb=# SELECT data3-(to_date(anno,&#8217;YYYYMMDD&#8217;)+364) FROM tbl01 WHERE id=4;</span><br />
<span style="color:#0000ff;"> ?column? </span><br />
<span style="color:#0000ff;">&#8212;&#8212;&#8212;-</span><br />
<span style="color:#0000ff;">        0</span><br />
<span style="color:#0000ff;">(1 row)</span></p>
<p># comando per calcolare la differenza tra il 31 dicembre dell&#8217;anno in corso e la &#8220;data2&#8243; (giorni in difetto fine anno):</p>
<p><span style="color:#0000ff;">mydb=# SELECT (to_date(anno,&#8217;YYYYMMDD&#8217;)+364)-data2 FROM tbl01 WHERE id=4;</span><br />
<span style="color:#0000ff;"> ?column? </span><br />
<span style="color:#0000ff;">&#8212;&#8212;&#8212;-</span><br />
<span style="color:#0000ff;">        0</span><br />
<span style="color:#0000ff;">(1 row)</span></p>
<p>===========================================================================</p>
<p>Supponiamo di avere due tabelle in relazione 1 a molti (tabella &#8220;a&#8221; e tabella &#8220;b&#8221;) con campo di collegamento (&#8220;id&#8221; della tabella &#8220;a&#8221; si collega a a_id della tabella &#8220;b&#8221;). Se vogliamo recuperare valori da entrambe le tabelle:</p>
<p><span style="color:#0000ff;">mydb=# SELECT a.campo1, b.campo2 FROM a,b WHERE a.id=b.a_id AND campo3=valore ORDER BY id;</span></p>
<p>===========================================================================</p>
<p>Quella che segue e&#8217; una query su una tabella cosi&#8217; strutturata:</p>
<table width="321">
<tbody>
<tr>
<td>id</td>
<td>integer</td>
</tr>
<tr>
<td>utente_id</td>
<td>integer</td>
</tr>
<tr>
<td>data_lettura0</td>
<td>date</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase0_l0</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase1_l0</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase2_l0</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase3_l0</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>totale_energia_attiva_kwh_l0</td>
<td>numeric(12,2)</td>
</tr>
<tr>
<td>data_lettura1</td>
<td>date</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase0_l1</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase1_l1</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase2_l1</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase3_l1</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>totale_energia_attiva_kwh_l1</td>
<td>numeric(12,2)</td>
</tr>
<tr>
<td>data_lettura2</td>
<td>date</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase0_l2</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase1_l2</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase2_l2</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase3_l2</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>totale_energia_attiva_kwh_l2</td>
<td>numeric(12,2)</td>
</tr>
<tr>
<td>data_lettura3</td>
<td>date</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase0_l3</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase1_l3</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase2_l3</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>energia_attiva_kwh_fase3_l3</td>
<td>numeric(10,2)</td>
</tr>
<tr>
<td>totale_energia_attiva_kwh_l3</td>
<td>numeric(12,2)</td>
</tr>
<tr>
<td>anno</td>
<td>character varying(4)</td>
</tr>
<tr>
<td>inizio_anno</td>
<td>date</td>
</tr>
<tr>
<td>fine_anno</td>
<td>date</td>
</tr>
<tr>
<td>consumo_anno</td>
<td>integer</td>
</tr>
</tbody>
</table>
<p># query per aggiornare la tabella delle letture (in un db che contiene le letture dei consumi di contatori elettrici) calcolando il consumo_anno nel caso in cui data_lettura0!=data_lettura1 per l&#8217;anno=&#8217;2009&#8242;:</p>
<p><span style="color:#0000ff;">energia_django=&gt; UPDATE manager_letturailluminazione SET consumo_anno=(totale_energia_attiva_kwh_l3-totale_energia_attiva_kwh_l1)+((totale_energia_attiva_kwh_l1-totale_energia_attiva_kwh_l0)/(data_lettura1-data_lettura0)*(data_lettura1-(to_date(anno,&#8217;YYYYMMDD&#8217;)-1)))-((totale_energia_attiva_kwh_l1-totale_energia_attiva_kwh_l0)/(data_lettura1-data_lettura0)*(data_lettura3-(to_date(anno,&#8217;YYYYMMDD&#8217;)+364)))  WHERE anno=&#8217;2009&#8242; AND data_lettura0!=data_lettura1;</span></p>
<table>
<tbody>
<tr>
<td><a href="http://100.0.4.231/phppgadmin/colproperties.php?subject=column&amp;server=localhost%3A5432%3Aallow&amp;database=energia_django&amp;schema=public&amp;table=manager_letturailluminazione&amp;column=id&amp;">id</a></td>
<td>integer</td>
</tr>
</tbody>
</table>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/flaviorigolon.wordpress.com/909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/flaviorigolon.wordpress.com/909/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/flaviorigolon.wordpress.com/909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/flaviorigolon.wordpress.com/909/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/flaviorigolon.wordpress.com/909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/flaviorigolon.wordpress.com/909/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/flaviorigolon.wordpress.com/909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/flaviorigolon.wordpress.com/909/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/flaviorigolon.wordpress.com/909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/flaviorigolon.wordpress.com/909/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/flaviorigolon.wordpress.com/909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/flaviorigolon.wordpress.com/909/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/flaviorigolon.wordpress.com/909/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/flaviorigolon.wordpress.com/909/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=909&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mapfreely.org/2012/01/13/postgresql-qualche-tips-qualche-tricks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>45.580163 11.517611</georss:point>
		<geo:lat>45.580163</geo:lat>
		<geo:long>11.517611</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fcb187d8245fbbcfdbaedd43f9b28f5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">flaviorigolon</media:title>
		</media:content>
	</item>
		<item>
		<title>GFOSS-DAY 2011 &#124; Foggia</title>
		<link>http://mapfreely.org/2011/11/23/gfoss-day-2011-foggia/</link>
		<comments>http://mapfreely.org/2011/11/23/gfoss-day-2011-foggia/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 13:49:42 +0000</pubDate>
		<dc:creator>flaviorigolon</dc:creator>
				<category><![CDATA[blogging]]></category>
		<category><![CDATA[gfoss]]></category>

		<guid isPermaLink="false">http://mapfreely.org/?p=892</guid>
		<description><![CDATA[Oggi 24 novembre 2011 inizia il quarto GFOSS-DAY. Dopo gli appuntamenti di Pontedera, Bolzano e Foligno è la volta di una sede pugliese. Il programma è ricchissimo e denso di temi e da oggi è anche attivo, grazie all&#8217;università, il canale streaming a questo indirizzo: http://www.media.unifg.it/gfoss/ accorrete numerosi!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=892&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_895" class="wp-caption aligncenter" style="width: 410px"><a href="//gfoss.it/drupal/gfossday2011/programma"><img class=" wp-image-895   " title="logo_gfoss_osgeo" src="http://flaviorigolon.files.wordpress.com/2011/11/logo_gfoss_osgeo.png?w=400&h=80" alt="" width="400" height="80" /></a><p class="wp-caption-text">gfoss.it</p></div>
<p>Oggi 24 novembre 2011 inizia il quarto GFOSS-DAY. Dopo gli appuntamenti di Pontedera, Bolzano e Foligno è la volta di una sede pugliese.</p>
<p>Il <a href="http://gfoss.it/drupal/gfossday2011/programma">programma</a> è ricchissimo e denso di temi e da oggi è anche attivo, grazie all&#8217;università, il canale streaming a questo indirizzo: <a href="http://www.media.unifg.it/gfoss/" target="_blank">http://www.media.unifg.it/gfoss/</a></p>
<p>accorrete numerosi!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/flaviorigolon.wordpress.com/892/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/flaviorigolon.wordpress.com/892/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/flaviorigolon.wordpress.com/892/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/flaviorigolon.wordpress.com/892/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/flaviorigolon.wordpress.com/892/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/flaviorigolon.wordpress.com/892/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/flaviorigolon.wordpress.com/892/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/flaviorigolon.wordpress.com/892/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/flaviorigolon.wordpress.com/892/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/flaviorigolon.wordpress.com/892/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/flaviorigolon.wordpress.com/892/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/flaviorigolon.wordpress.com/892/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/flaviorigolon.wordpress.com/892/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/flaviorigolon.wordpress.com/892/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=892&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mapfreely.org/2011/11/23/gfoss-day-2011-foggia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>45.580163 11.517611</georss:point>
		<geo:lat>45.580163</geo:lat>
		<geo:long>11.517611</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fcb187d8245fbbcfdbaedd43f9b28f5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">flaviorigolon</media:title>
		</media:content>

		<media:content url="http://flaviorigolon.files.wordpress.com/2011/11/logo_gfoss_osgeo.png?w=300" medium="image">
			<media:title type="html">logo_gfoss_osgeo</media:title>
		</media:content>
	</item>
		<item>
		<title>docky e la barra nera</title>
		<link>http://mapfreely.org/2011/11/03/docky-e-la-barra-nera/</link>
		<comments>http://mapfreely.org/2011/11/03/docky-e-la-barra-nera/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 08:14:00 +0000</pubDate>
		<dc:creator>flaviorigolon</dc:creator>
				<category><![CDATA[linuxing]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://mapfreely.org/?p=882</guid>
		<description><![CDATA[Ho provato ad installare docky. L&#8217;installazione avviene tramite apt o synaptic: # apt-get install docky Unico inconveniente iniziale è la presenza di una fastidiosissima fascia nera a lato (o sotto, a seconda del punto in cui abbiamo agganciato docky). Di questo veniamo anche avvisati da un messaggio che recita più o meno così &#8220;&#8230;enable composting&#8230;&#8220;. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=882&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ho provato ad installare <a href="http://wiki.go-docky.com/index.php?title=Welcome_to_the_Docky_wiki">docky</a>.</p>
<div id="attachment_883" class="wp-caption aligncenter" style="width: 630px"><a href="http://flaviorigolon.files.wordpress.com/2011/11/docky01.png"><img class="size-full wp-image-883" title="docky01" src="http://flaviorigolon.files.wordpress.com/2011/11/docky01.png?w=620&h=387" alt="docky" width="620" height="387" /></a><p class="wp-caption-text">docky agganciato al lato sinistro del desktop</p></div>
<p>L&#8217;installazione avviene tramite apt o synaptic:</p>
<p><span style="color:#0000ff;"># apt-get install docky</span></p>
<p>Unico inconveniente iniziale è la presenza di una fastidiosissima fascia nera a lato (o sotto, a seconda del punto in cui abbiamo agganciato docky). Di questo veniamo anche avvisati da un messaggio che recita più o meno così &#8220;<span style="color:#0000ff;">&#8230;enable composting&#8230;</span>&#8220;. Per ovviare al problema è necessario un <a title="compositing window manager" href="http://en.wikipedia.org/wiki/Compositing_window_manager">Compositing window manager</a>. Per abilitarlo in Metacity agire come segue:</p>
<p>- lanciamo gconf-editor:</p>
<p><span style="color:#0000ff;">$ gconf-editor</span></p>
<p>Sul frame di sinistra ci posizioniamo su &#8220;<span style="color:#0000ff;">apps &gt; metacity &gt; general</span>&#8220;; poi, sulla destra, spuntiamo il checkbox in corrispondenza della voce &#8220;<span style="color:#0000ff;">compositing_manager</span>&#8220;.</p>
<div id="attachment_884" class="wp-caption aligncenter" style="width: 630px"><a href="http://flaviorigolon.files.wordpress.com/2011/11/docky02.png"><img class="size-full wp-image-884" title="docky02" src="http://flaviorigolon.files.wordpress.com/2011/11/docky02.png?w=620&h=377" alt="" width="620" height="377" /></a><p class="wp-caption-text">spuntiamo &quot;compositing_manager&quot;</p></div>
<p>Fatto: la barra nera dovrebbe scomparire.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/flaviorigolon.wordpress.com/882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/flaviorigolon.wordpress.com/882/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/flaviorigolon.wordpress.com/882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/flaviorigolon.wordpress.com/882/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/flaviorigolon.wordpress.com/882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/flaviorigolon.wordpress.com/882/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/flaviorigolon.wordpress.com/882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/flaviorigolon.wordpress.com/882/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/flaviorigolon.wordpress.com/882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/flaviorigolon.wordpress.com/882/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/flaviorigolon.wordpress.com/882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/flaviorigolon.wordpress.com/882/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/flaviorigolon.wordpress.com/882/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/flaviorigolon.wordpress.com/882/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=882&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mapfreely.org/2011/11/03/docky-e-la-barra-nera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>45.580163 11.517611</georss:point>
		<geo:lat>45.580163</geo:lat>
		<geo:long>11.517611</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fcb187d8245fbbcfdbaedd43f9b28f5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">flaviorigolon</media:title>
		</media:content>

		<media:content url="http://flaviorigolon.files.wordpress.com/2011/11/docky01.png" medium="image">
			<media:title type="html">docky01</media:title>
		</media:content>

		<media:content url="http://flaviorigolon.files.wordpress.com/2011/11/docky02.png" medium="image">
			<media:title type="html">docky02</media:title>
		</media:content>
	</item>
		<item>
		<title>Postgresql &#124; Postgis &#124; modificare i valori dei campi di una vista</title>
		<link>http://mapfreely.org/2011/10/31/postgresql-postgis-modificare-i-valori-dai-campi-di-una-vista/</link>
		<comments>http://mapfreely.org/2011/10/31/postgresql-postgis-modificare-i-valori-dai-campi-di-una-vista/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 10:30:29 +0000</pubDate>
		<dc:creator>flaviorigolon</dc:creator>
				<category><![CDATA[db-ing & geodb-ing]]></category>
		<category><![CDATA[mapping]]></category>
		<category><![CDATA[postgis]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://mapfreely.org/?p=876</guid>
		<description><![CDATA[Lavorando con Postgresql&#124;Postgis mi capita spesso di avere delle tavole come viste &#8220;View&#8221; ottenute dal join di una tabella geomerica e di una tabella non-geometrica. Esempio: la tabella geometrica contiene poligoni (edifici) con un campo chiave (es= scheda); la tabella alfanumerica contiene tutti i dati relativi a quegli edifici + un campo chiave &#8220;scheda&#8221; come [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=876&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Lavorando con Postgresql|Postgis mi capita spesso di avere delle tavole come viste &#8220;View&#8221; ottenute dal join di una tabella geomerica e di una tabella non-geometrica. Esempio: la tabella geometrica contiene poligoni (edifici) con un campo chiave (es= scheda); la tabella alfanumerica contiene tutti i dati relativi a quegli edifici + un campo chiave &#8220;scheda&#8221; come la prima.</p>
<p>Questo perché, in un lavoro svolto, un utente si occupava di gestire la parte geometrica (mediante <a title="Home page Quantum GIS" href="http://www.qgis.org">QGIS</a>) mentre un altro utente caricava i dati alfanumerici relativi ad un rilievo di edifici mediante interfaccia web (via <a href="http://www.php.net/">PHP</a>).</p>
<p>In un secondo momento quindi è stata creata una join fra le due tabelle in modo da generare tavole tematiche sulle condizioni e sull&#8217;uso di quegli edifici.</p>
<p>Ecco la View creata (siano &#8220;<span style="color:#0000ff;">schede</span>&#8221; e &#8220;<span style="color:#0000ff;">schede_nogeom</span>&#8221; rispettivamente la tabella geometrica e non-geometrica)</p>
<p><span style="color:#0000ff;">=&gt; <strong><span style="color:#ff0000;">CREATE VIEW</span></strong> schede_cartogr <span style="color:#ff0000;"><strong>AS SELECT</strong></span> scheda_nogeom.grado, scheda_nogeom.altezza, scheda_nogeom.volume, scheda_nogeom.piani, scheda_nogeom.note, scheda_nogeom.stcontetto, scheda_nogeom.punttetto, scheda_nogeom.stconprosp, scheda_nogeom.puntprosp, scheda_nogeom.stconserr, scheda_nogeom.puntserr, scheda_nogeom.stconsolai, scheda_nogeom.puntsolai, scheda_nogeom.stconmurat, scheda_nogeom.stcompl, scheda_nogeom.puntcompl, scheda_nogeom.d_uso_pint, scheda_nogeom.d_uso_pt, scheda_nogeom.d_uso_p1, scheda_nogeom.d_uso_p2, scheda_nogeom.d_uso_p3, scheda_nogeom.d_uso_p4, scheda_nogeom.d_uso_p5, scheda_nogeom.d_uso_compl, scheda_nogeom.d_uso_progetto, scheda_nogeom.d_uso_comp_grafica, scheda_nogeom.essenze_arboree, scheda_nogeom.emerg_arch, scheda_nogeom.h_pint, scheda_nogeom.h_pt, scheda_nogeom.h_p1, scheda_nogeom.h_p2, scheda_nogeom.h_p3, scheda_nogeom.h_p4, scheda_nogeom.h_p5, scheda_nogeom.vol_pint, scheda_nogeom.vol_pt, scheda_nogeom.vol_p1, scheda_nogeom.vol_p2, scheda_nogeom.vol_p3, scheda_nogeom.vol_p4, scheda_nogeom.vol_p5, scheda.area_gis, scheda_nogeom.foto1, scheda_nogeom.estratto_cartografico, scheda_nogeom.vol_residenza, scheda_nogeom.vol_comm_dir, scheda_nogeom.vol_artigianale, scheda_nogeom.vol_pubblico, scheda_nogeom.vol_misto, scheda_nogeom.puntmurat, scheda_nogeom.d_uso_vigente, scheda.gid, scheda.the_geom, scheda.scheda <span style="color:#ff0000;"><strong>FROM</strong></span> scheda <span style="color:#ff0000;"><strong>JOIN</strong></span> scheda_nogeom <span style="color:#ff0000;"><strong>ON</strong></span> scheda.scheda::text = scheda_nogeom.scheda::text;</span></p>
<p>- Caricando questa vista in QGIS riusciamo quindi a consultare geometrie e tutti i valori colelgati. Ma se ad un certo punto voglio modificare un valore o alcuni valori della tabella? Abilitando l&#8217;editing sul layer &#8220;<span style="color:#0000ff;">schede_cartogr</span>&#8221; vediamo che possiamo modificare i valori ma al momento del salvataggio veniamo avvisati che non è possibile. Ci viene allora in aiuto la creazione di un <span style="color:#0000ff;">RULE</span> con istruzione &#8220;<span style="color:#0000ff;">DO INSTEAD</span>&#8221; in Postgresql . In sostanza si tratta di una regola che consente di modificare la (o le) tabelle origine agendo sulla vista.</p>
<p>In generale la sintassi è la seguente:</p>
<p><span style="color:#0000ff;">&gt;= <span style="color:#ff0000;"><strong>CREATE RULE</strong></span> nome_rule_da_creare <span style="color:#ff0000;"><strong>AS ON UPDATE TO</strong></span> nome_della_view <span style="color:#ff0000;"><strong>DO INSTEAD UPDATE</strong></span> nome_tabella_origine <span style="color:#ff0000;"><strong>SET</strong></span> nome_campo=<span style="color:#ff0000;"><strong>NEW</strong></span>.nome_campo <span style="color:#ff0000;"><strong>WHERE</strong></span> campo_chiave=<span style="color:#ff0000;"><strong>NEW</strong></span>.campo_chiave;</span></p>
<p>Ecco la definizione del RULE che ho usato:</p>
<p><span style="color:#0000ff;">=&gt;CREATE RULE update_grado_schede_cartogr AS ON UPDATE TO schede_cartogr DO INSTEAD UPDATE scheda_nogeom SET grado=NEW.grado WHERE scheda=NEW.scheda;</span></p>
<p>D&#8217;ora in avanti possiamo modificare da QGIS il valore del campo &#8220;<span style="color:#0000ff;">grado</span>&#8220;; verrà aggiornato di conseguenza il valore della tabella originale.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/flaviorigolon.wordpress.com/876/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/flaviorigolon.wordpress.com/876/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/flaviorigolon.wordpress.com/876/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/flaviorigolon.wordpress.com/876/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/flaviorigolon.wordpress.com/876/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/flaviorigolon.wordpress.com/876/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/flaviorigolon.wordpress.com/876/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/flaviorigolon.wordpress.com/876/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/flaviorigolon.wordpress.com/876/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/flaviorigolon.wordpress.com/876/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/flaviorigolon.wordpress.com/876/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/flaviorigolon.wordpress.com/876/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/flaviorigolon.wordpress.com/876/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/flaviorigolon.wordpress.com/876/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mapfreely.org&#038;blog=6514393&#038;post=876&#038;subd=flaviorigolon&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mapfreely.org/2011/10/31/postgresql-postgis-modificare-i-valori-dai-campi-di-una-vista/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>45.580163 11.517611</georss:point>
		<geo:lat>45.580163</geo:lat>
		<geo:long>11.517611</geo:long>
		<media:content url="http://1.gravatar.com/avatar/fcb187d8245fbbcfdbaedd43f9b28f5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">flaviorigolon</media:title>
		</media:content>
	</item>
	</channel>
</rss>
