sqlog http://blogs.ugidotnet.org/sqlog/Default.aspx sql & co it-IT pietro partescano Subtext Version 2.6.0.0 sqlog http://blogs.ugidotnet.org/images/RSS2Image.gif http://blogs.ugidotnet.org/sqlog/Default.aspx 77 60 Si cambia piattaforma... Varie http://blogs.ugidotnet.org/sqlog/archive/2015/11/14/si-cambia-piattaforma.aspx Dopo quasi 10 anni è arrivato il momento di fare una cosa su cui meditavo da un po' di tempo.<br /> <br /> qui: <a href="http://donotexists.blogspot.it/">http://donotexists.blogspot.it/</a> dove potrete continuarmi a seguire.<img src="http://blogs.ugidotnet.org/sqlog/aggbug/102069.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2015/11/14/si-cambia-piattaforma.aspx Sat, 14 Nov 2015 19:39:29 GMT http://blogs.ugidotnet.org/sqlog/archive/2015/11/14/si-cambia-piattaforma.aspx#feedback http://blogs.ugidotnet.org/sqlog/comments/commentRss/102069.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/102069.aspx PostgreSQL & cstore_fdw PostgreSQL http://blogs.ugidotnet.org/sqlog/archive/2015/08/24/postgresql-cstore_fdw.aspx <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" id="docs-internal-guid-a82e11b0-606d-3ef4-5d13-5d4d622a765c"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">cstore_fdw</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">cstore_fdw è una (delle molte) estensioni messe a disposizione dalla community di PostgreSQL, che permette di salvare in modalità colonnare i nostri dati all'interno della base dati di PostgreSQL.</span></p> <br /> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Come funziona</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Da come si può dedurre dalle iniziali "fdw" (foreign-data wrapper), questa estensione mette disposizione una nuova tipologia di tabelle con funzionalità e formato diverso da quello standard utilizzato in PostgreSQL. Per gestire i dati, le tabelle sono suddivise in due tipologie di file:</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Data File</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Qui trovano posto i dati. Questi vengono salvati nell'ordine in cui sono inseriti (vedremo più avanti le conseguenze di ciò). Ogni data file è unico e (a differenza dei data-file PostgreSQL) non viene suddiviso raggiunta una  determinata  dimensione. Al suo interno i dati vengono suddivisi in "</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;">Row Stripes</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">" che raggruppano set di tuple (il numero di righe è configurabile) che costituiscono la nostra tabella. Le Row Stripes sono caratterizzate da tre sezioni:</span></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Stripe Skip List</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">: si possono considerare l'indice delle nostre tabelle, mantengono il valore minimo e massimo di ogni colonna contenuta all'interno del singolo Row Stripe. Questo permette di identificare (data una condizione where) se l'informazione risiede o meno all'interno del suddetto Row Stripe.</span></p> </li> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Stripe Data</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">: qui vengono contenuti i dati più un paio di informazioni di supporto (esempio la presenza o meno di valori nulli). Inoltre questa sezione è soggetta a compressione se tale opzione è attiva.</span></p> </li> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Stripe Footer</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">: qui  vengono mantenute informazioni quali la dimensione dei vari Stripe Skip List e Stripe Data.</span></p> </li> </ul> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Per gestire le varie Row Stripes, contenute in un data file, viene aggiunto un secondo file di supporto o "</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;">Footer File</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">", dove trovano posto le informazioni sulla dimensione e la posizione di ogni singolo Row Stripe.</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Indicizzazione  dei dati</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Come accennato sopra, i dati all'interno del nostro data file sono raggruppati in set di righe e quindi indicizzati. Per ogni set di righe viene calcolato il minimo e il massimo valore contenuto nelle relative colonne. Questo comporta in fase di ricerca di identificare se una determinata informazione si trovi nel rowset che  si sta analizzando, evitando di dover fare lunghe scansioni di ogni singolo Row Stripe. A tal proposito è consigliabile importare i dati nell'ordine  con cui, realisticamente, verranno effettuate le ricerche.</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Quindi se la nostra tabella conterrà: <br /> </span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"><br /> </span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">(</span></p> <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt; margin-left: 40px;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">dt_day timestamp without time zone NOT NULL, -- Data</span></p> <div style="margin-left: 40px;"> </div> <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt; margin-left: 40px;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">list_id integer NOT NULL,</span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">    </span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">--Identificativo di riga</span></p> <div style="margin-left: 40px;"> </div> <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt; margin-left: 40px;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">count integer</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">)</span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;" /><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"><br /> </span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">e prevediamo di effettuare </span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">query</span> che insisteranno sul campo </span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">dt_day</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> e </span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">list_day</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">, una buona soluzione sarebbe quella di caricare i dati già ordinati per </span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">dt_day</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">, </span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">list_id</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">, </span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">count</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">. Questo comporta la riduzione di overlap delle informazioni su diverse Row Stripes e quindi aumentare il numero di Row Stripes esclusi in fase di scansione. </span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Installazione</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">L'installazione effettuata su CentOS 7 si è rivelata semplice e  veloce.</span></p> <br /> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Installate </span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">protobuf-c-devel</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">, su CentOS 7 dovrete aggiungere il repository EPEL:</span></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li dir="ltr" style="list-style-type:circle;font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">sudo yum install protobuf-c-devel</span></p> </li> </ul> </li> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Aggiungete nel PATH il percorso dove si trova il file </span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">pg_config</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">:</span></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li dir="ltr" style="list-style-type:circle;font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">PATH=/usr/local/pgsql/bin/:$PATH</span></p> </li> </ul> </li> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Infine eseguite il </span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">make install</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">.</span></p> </li> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Aggiungete nel file </span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">postgresql.conf</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> (dovrete  riavviare il servizio di PostgreSQL):</span></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li dir="ltr" style="list-style-type:circle;font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">shared_preload_libraries = 'cstore_fdw'</span></p> </li> </ul> </li> </ul> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Utilizzo</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Fatta  eccezione per alcune parametri (non obbligatori) che è possibile dichiarare in fase di inizializzazione delle nostre tabelle, non è necessario conoscere nulla di più delle normali istruzioni SQL, che già utilizziamo per inserire o estrarre dati.</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Di seguito un esempio:</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">--Procediamo con l'installare l'estensione nel nostro database.</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">CREATE EXTENSION cstore_fdw;</span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">    </span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">    </span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">--Creiamo il l'oggetto server per mezzo del quale utilizzeremo il 'cstore_fdw'</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">CREATE SERVER cstore_server FOREIGN DATA WRAPPER cstore_fdw;</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">--Creiamo la nostra tabella</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">CREATE FOREIGN TABLE cs_count_view_per_ads</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">(</span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">    </span><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">dt_day timestamp without time zone NOT NULL,</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-indent: 36pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">list_id integer NOT NULL,</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-indent: 36pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">count integer</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">)</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">SERVER cstore_server OPTIONS (compression 'pglz');</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Qui mi sono limitato a dichiarare solo l'opzione "compress". Ma è possibile utilizzare anche le seguenti opzioni:</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">filename</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">: indicando il percorso assoluto e il nome del file da utilizzare, è possibile specificare dove il file che conterrà i dati della tabella sarà salvato.</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">compression</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">: le opzioni previste sono "</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;">none</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">" e "</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;">pglz</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">". Attiva o meno la  compressione  dati.</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">stripe_row_count</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">: numero di righe che costituiscono una singola Row Stripe. Considerate  che più è alto questo valore, migliori saranno le prestazioni, ma maggiore sarà la richiesta di memoria. Default  150.000.</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">block_row_count</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">: numero di righe per singola colonna. Il default è 1.000. Modificando questo valore, si va a modificare la "risoluzione" (o granularità) del nostro indice. Più è basso più preciso sarà il nostro indice. Di contro aumenteranno le richieste di lettura del nostro Row Stripe e diminuirà il rapporto di compressione. Utilizzare valori bassi torna utile nel caso di avere dati poco ordinati e richieste che recuperano set di dati relativamente piccoli.</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">L'utilizzo di valori più alti, comporta una  migliore compressione e una riduzione delle letture, ma (soprattutto se i dati non sono correttamente ordinati) potrebbero crescere il numero di overlap dei dati fra i vari Row Stripe (con conseguente riduzione delle prestazioni).</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Ovviamente non c'è la configurazione  perfetta, fate qualche prova, utilizzando set di dati il più simile possibile (per quantità e tipologia) a quelli che poi utilizzerete in produzione.</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Per caricare la nostra tabella, possiamo utilizzare:</span></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">il comando </span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">COPY</span></p> </li> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">INSERT INTO ... SELECT ... FROM</span></p> </li> </ul> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Infine ricordate  di fare un </span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">ANALYZE</span><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> della tabella (per aggiornare le statistiche).</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Alcune considerazioni</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Sulla nostra tabella, abbiamo caricato circa 295 milioni di righe.</span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">count_view_per_ads (normale tabella PostgreSQL): </span></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">righe: 295M</span></p> </li> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">dimensione tabella: 12GB</span></p> </li> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">dimensione indici (dt_day, list_id): 9GB</span></p> </li> </ul> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">cs_count_view_per_ads: </span></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">righe: 295M</span></p> </li> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Consolas;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">dimensioni tabella: 1.3GB</span></p> </li> </ul> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Ovviamente il rapporto di compressione può variare in base alla tipologia e allo schema della tabella, in ogni caso i livelli di compressione sono sempre nell'ordine del 50% (o superiori) rispetto alla tabella originale. A questo bisogna aggiungere che non viene allocato spazio aggiuntivo per gli indici.</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"><br /> </span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Per quanto riguarda le prestazioni vi invito a leggere qui:</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><a target="_blank" href="https://www.citusdata.com/citus-products/cstore-fdw/cstore-fdw-quick-start-guide"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">https://www.citusdata.com/citus-products/cstore-fdw/cstore-fdw-quick-start-guide</span></a></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"><br /> </span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Per la mia esperienza non ho riscontrato miglioramenti nei tempi di elaborazione delle query, in alcuni casi sono leggermente inferiori alle rispettive query che utilizzano normali tabelle con indici di PostgreSQL. </span></p> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Inoltre va tenuto in considerazione alcune limitazioni:</span></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">non è possibile utilizzare istruzioni di INSERT INTO ... VALUES, DELETE e UPDATE</span></p> </li> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">l'estensione non è disponibile per PostgreSQL per Windows.</span></p> </li> </ul> <br /> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Considerando le suddette limitazioni, utilizzare questa tipologia di tabelle può rivelarsi una valida soluzione nei casi in cui si ha a che fare con tabelle "in sola lettura" (time-series, log, storicizzazione dei dati, etc ...), dove inserire i dati e non dover provvedere a cancellarli.</span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Anche su tabelle di dimensioni relativamente può essere un'ottima  soluzione. </span></p> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Nel caso sia necessario effettuare  cancellazioni periodiche, bisogna intervenire sulla tabella:</span></p> <ul style="margin-top:0pt;margin-bottom:0pt;"> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">generando una  nuova tabella ed eliminando quella vecchia</span></p> </li> <li dir="ltr" style="list-style-type:disc;font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"> <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">lavorando con le tabelle partizionate</span></p> </li> </ul> <br /> <span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">Riferimenti<br /> </span> <ul> <li><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"><a href=" https://www.citusdata.com/citus-products/cstore-fdw" target="_blank"> https://www.citusdata.com/citus-products/cstore-fdw</a></span></span></li> <li><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"><span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;"><a href="https://www.citusdata.com/citus-products/cstore-fdw/cstore-fdw-quick-start-guide" target="_blank">https://www.citusdata.com/citus-products/cstore-fdw/cstore-fdw-quick-start-guide</a></span></span></li> </ul> <p><br /> </p> <span style="font-size:14.666666666666666px;font-family:Arial;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;" /><img src="http://blogs.ugidotnet.org/sqlog/aggbug/102036.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2015/08/24/postgresql-cstore_fdw.aspx Mon, 24 Aug 2015 19:04:08 GMT http://blogs.ugidotnet.org/sqlog/archive/2015/08/24/postgresql-cstore_fdw.aspx#feedback http://blogs.ugidotnet.org/sqlog/comments/commentRss/102036.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/102036.aspx Upgrade TaskUnZip for SSIS 1.4.6.5 e 1.5.1.0 (beta) http://blogs.ugidotnet.org/sqlog/archive/2015/03/29/upgrade-taskunzip-for-ssis-1.4.6.5-e-1.5.1.0-beta.aspx Aggiornato <span style="font-weight: bold;">TaskUnZip</span>, custom Task per SQL Server Integration Services, che permette di effettuare la compressione e decompressione dei file, all'interno di in package.<br /> <br /> Novità per la versione 1.4.6.5:<br /> <ul> <li>Aggiunto il supporto per file GZip, TAR e TAR-GZip.</li> <li>Migliorata la gestione delle cartelle all'interno dei file compressi. Adesso è possibile salvare i file con percorsi completi, relativi o senza cartelle.</li> <li>Sono state migliorate le performance di compressione e decompressione, riducendo il consumo di memoria.</li> </ul> <br /> Novità per la versione 1.5.1.0:<br /> <ul> <li>Aggiunto il supporto per SQL SERVER 2014 (x86 e x64).</li> <li>Aggiunta -finalmente!- il setup per l'installazione delle librerie.</li> </ul> <p>Qui: <a href="https://taskunzip.codeplex.com/" target="_blank">https://taskunzip.codeplex.com/</a></p> <p> </p><img src="http://blogs.ugidotnet.org/sqlog/aggbug/101966.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2015/03/29/upgrade-taskunzip-for-ssis-1.4.6.5-e-1.5.1.0-beta.aspx Sun, 29 Mar 2015 20:19:01 GMT http://blogs.ugidotnet.org/sqlog/archive/2015/03/29/upgrade-taskunzip-for-ssis-1.4.6.5-e-1.5.1.0-beta.aspx#feedback http://blogs.ugidotnet.org/sqlog/comments/commentRss/101966.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/101966.aspx PostgreSQL sull'uso della funzione row_number() PostgreSQL http://blogs.ugidotnet.org/sqlog/archive/2014/11/02/postgresql-sulluso-della-funzione-row_number.aspx <p><font size="2" face="">Qualche giorno fa era nata la necessità di dovere modificare una funzione in PostgreSQL  rendendo parametrizzatile il tipo di ordinamento (ASC o DESC) finale del set di dati restituito in output.<br /> <br /> La soluzione più semplice, ma probabilmente, meno efficiente era quello di rendere dinamico tutto lo script ed eseguirlo con il comando EXECUTE, parametrizzando l'ordinamento ed eseguendo il tutto all'interno della funzione stessa.</font></p> <p><font size="2" face="">Per esempio:</font></p> <pre><font size="2">CREATE OR REPLACE FUNCTION funct_1(IN p_1, IN p_order_type text)<br />  RETURNS TABLE( [. . .] ) AS<br />$BODY$</font></pre> <pre><font size="2">RETURN QUERY EXECUTE '</font></pre> <pre><font size="2">SELECT [ . . .]</font></pre> <pre><font size="2">FROM my_table</font></pre> <pre><font size="2">WHERE [. . . ]</font></pre> <pre><font size="2">ORDER BY col_1 ' ||  p_order_type || '<br />LIMIT 1<br />';</font></pre> <pre><font size="2">$BODY$<br />  LANGUAGE sql STABLE<br />  COST 100<br />  ROWS 1;</font></pre> <p><font size="2" face="" /></p> <p><font size="2" face="">Ma questa è una delle condizioni dove le funzioni "window":<br /> </font><font face=""><a target="_blank" href="http://www.postgresql.org/docs/9.1/static/functions-window.html"><font size="2">http://www.postgresql.org/docs/9.1/static/functions-window.html</font></a><br /> <font size="2">possono venirci in aiuto.<br /> In particolare quella che fa al caso nostro è: <em>row_number()</em> che si fa carico di numerare (partendo da 1) ogni riga del nostro set di dati, in base ad un ordinamento pre-impostato.</font></font><font size="2"> </font></p> <pre><font size="2"> </font></pre> <pre><font size="2">CREATE OR REPLACE FUNCTION funct_1(IN p_1, IN p_order_asc bool)<br />  RETURNS TABLE( [. . .] ) AS<br />$BODY$</font></pre> <pre><br /><font size="2">SELECT [ . . .]</font></pre> <pre><font size="2">FROM my_table</font></pre> <pre><font size="2">WHERE [. . . ]</font></pre> <pre><font size="2">ORDER BY <br />CASE <br /> WHEN p_order_asc THEN <br />  ( row_number() over (ORDER BY col_1 asc ) )   --L'ordinamento ASC viene garantito <br /> --</font><font size="2">dalla funzione row_number() <br /> --applicato alla colonna " 'col_1' ASC "<br /> ELSE <br />  ( row_number() over (ORDER BY col_1 desc ) )   --L'ordinamento DESC stessa impostazione di quello ASC.<br />END<br />LIMIT 1<br />;</font></pre> <pre><font size="2">$BODY$<br />  LANGUAGE sql STABLE<br />  COST 100<br />  ROWS 1;</font></pre> <p><br /> <font size="2">Faccio notare l'ordinamento:</font></p> <pre><font size="2">ORDER BY <br />CASE <br /> WHEN p_order_asc THEN <br />  ( row_number() over (ORDER BY col_1 asc ) <br /></font><font size="2"> ELSE <br />  ( row_number() over (ORDER BY col_1 desc ) )<br /></font><font size="2">END</font></pre> <font face=""> <p><font size="2"> </font></p> <p><font size="2">Il piano di esecuzione, senza l'utilizzo e con l'utilizzo della funzione 'row_number()'. <br /> La differenza è minima, e lavorando su una migliore indicizzazione dei campi interessati, probabilmente si può ulteriormente migliorare.<br /> Va considerato che il piano di esecuzione senza l'utilizzo della funzione  'row_number()' (il primo) è al netto del costo della funzione 'EXECUTE'.</font></p> <p><font size="2">  </font></p> <pre><font size="2">Limit  (cost=445.73..445.73 rows=1 width=42)<br />  -&gt;  Sort  (cost=445.73..446.16 rows=172 width=42)<br />        Sort Key: "timestamp", state_id<br />        -&gt;  Index Scan using [...]  (cost=0.57..444.87 rows=172 width=42)<br />              Index Cond: (ad_id = 123)</font></pre> <pre><br /><font size="2">Limit  (cost=455.55..455.56 rows=1 width=42)<br />  -&gt;  Sort  (cost=455.55..455.98 rows=172 width=42)<br />        Sort Key: (row_number() OVER (?))<br />        -&gt;  WindowAgg  (cost=451.25..454.69 rows=172 width=42)<br />              -&gt;  Sort  (cost=451.25..451.68 rows=172 width=42)<br />                    Sort Key: "timestamp", state_id<br />                    -&gt;  Index Scan using [...]  (cost=0.57..444.87 rows=172 width=42)<br />                          Index Cond: (ad_id = 123)</font></pre> <pre><font size="2"> </font></pre> <p><font size="2"> </font></p> </font><img src="http://blogs.ugidotnet.org/sqlog/aggbug/101897.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2014/11/02/postgresql-sulluso-della-funzione-row_number.aspx Sun, 02 Nov 2014 12:30:13 GMT http://blogs.ugidotnet.org/sqlog/archive/2014/11/02/postgresql-sulluso-della-funzione-row_number.aspx#feedback http://blogs.ugidotnet.org/sqlog/comments/commentRss/101897.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/101897.aspx Bootstrap http://blogs.ugidotnet.org/sqlog/archive/2013/01/30/bootstrap.aspx Interessante libreria Javascript/CSS ricca di funzionalità.<br /> <br /> <a href="http://twitter.github.com/bootstrap/" target="_blank">http://twitter.github.com/bootstrap/</a><img src="http://blogs.ugidotnet.org/sqlog/aggbug/101417.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2013/01/30/bootstrap.aspx Wed, 30 Jan 2013 00:05:35 GMT http://blogs.ugidotnet.org/sqlog/archive/2013/01/30/bootstrap.aspx#feedback http://blogs.ugidotnet.org/sqlog/comments/commentRss/101417.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/101417.aspx Upgrade TaskUnZip for SSIS 1.4.0.0 http://blogs.ugidotnet.org/sqlog/archive/2013/01/30/upgrade-taskunzip-for-ssis-1.4.0.0.aspx Aggiornato il tool TaskUnZip for SSIS. <br /> Permette di gestire, comprimere e decomprimere file zip all'interno di un flusso di SSIS.<br /> <br /> Per maggiori informazioni qui: <a target="_blank" href="http://taskunzip.codeplex.com/">http://taskunzip.codeplex.com/</a>.<br /> <strong><br /> Ver. 1.4.0.0</strong> <ul> <li>add option overwrite destination file zip</li> <li>other minor fix</li> <li>update batch file</li> <li>Remove Support version for SQL Server 2008 / R2 (use ver. 1.3.0.1).</li> </ul><img src="http://blogs.ugidotnet.org/sqlog/aggbug/101416.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2013/01/30/upgrade-taskunzip-for-ssis-1.4.0.0.aspx Wed, 30 Jan 2013 00:02:46 GMT http://blogs.ugidotnet.org/sqlog/archive/2013/01/30/upgrade-taskunzip-for-ssis-1.4.0.0.aspx#feedback http://blogs.ugidotnet.org/sqlog/comments/commentRss/101416.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/101416.aspx Transactional NTFS (TxF) .NET http://blogs.ugidotnet.org/sqlog/archive/2012/02/18/transactional-ntfs-txf-.net.aspx <p style="margin-bottom: 0cm">Da qualche settimana nel -poco- tempo libero porto avanti questa piccola e semplice libreria che permette di interagire con le Windows Api che gestiscono le transazioni a livello di file-system.</p> <p style="margin-bottom: 0cm;">Per maggiori info su quali operazioni sono supportate, vi rimando alla relativa pagina su Codeplex:</p> <p style="margin-bottom: 0cm"><a target="_blank" href="http://txfnet.codeplex.com/">http://txfnet.codeplex.com/</a><br /> <a target="_blank" href="http://txfnet.codeplex.com/documentation">http://txfnet.codeplex.com/documentation</a><br /> </p> <p style="margin-bottom: 0cm;">Vi segnalo anche un paio di link per approfondire l’argomento:</p> <p style="margin-bottom: 0cm"><a target="_blank" href="http://msdn.microsoft.com/en-us/magazine/cc163388.aspx" class="externalLink">http://msdn.microsoft.com/en-us/magazine/cc163388.aspx<span class="externalLinkIcon" /></a><br /> <a target="_blank" href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb968806%28v=vs.85%29.aspx" class="externalLink">http://msdn.microsoft.com/en-us/library/windows/desktop/bb968806%28v=vs.85%29.aspx<span class="externalLinkIcon" /></a><br /> <a target="_blank" href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa363764%28v=vs.85%29.aspx" class="externalLink">http://msdn.microsoft.com/en-us/library/windows/desktop/aa363764%28v=vs.85%29.aspx</a><a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa363764%28v=vs.85%29.aspx" class="externalLink"><span class="externalLinkIcon" /></a></p><img src="http://blogs.ugidotnet.org/sqlog/aggbug/100781.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2012/02/18/transactional-ntfs-txf-.net.aspx Sat, 18 Feb 2012 21:50:01 GMT http://blogs.ugidotnet.org/sqlog/archive/2012/02/18/transactional-ntfs-txf-.net.aspx#feedback http://blogs.ugidotnet.org/sqlog/comments/commentRss/100781.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/100781.aspx Upgrade TaskUnZip for SSIS http://blogs.ugidotnet.org/sqlog/archive/2011/12/11/upgrade-taskunzip-for-ssis.aspx Ho aggiornato il tool TaskUnZip for SSIS. Permette di gestire, comprimere e decomprimere file zip all'interno di un flusso di SSIS.<br /> <br /> Per maggiori informazioni qui: <a target="_blank" href="http://taskunzip.codeplex.com/">http://taskunzip.codeplex.com/</a>.<br /> <strong><br /> Ver. 1.3.0.1</strong> <ul> <li>Add: Support SQL SERVER 2008 and SQL SERVER 2008 R2.</li> <li>Add: installation batch file for x86 e x64 (tnx <strong>JohannesHoppe</strong>).</li> <li>Upgrade sample with foreach loop task.</li> <li>Upgrade SharpZipLib for .NET Framework ver. 0.86.</li> <li>Upgrade solution to Visual Studio 2010.</li> <li>Remove version for SQL Server 2005 (use ver. 1.2.0.0).</li> </ul> <p><br /> </p><img src="http://blogs.ugidotnet.org/sqlog/aggbug/100618.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2011/12/11/upgrade-taskunzip-for-ssis.aspx Sun, 11 Dec 2011 19:56:30 GMT http://blogs.ugidotnet.org/sqlog/archive/2011/12/11/upgrade-taskunzip-for-ssis.aspx#feedback 1 http://blogs.ugidotnet.org/sqlog/comments/commentRss/100618.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/100618.aspx un paio di libri... http://blogs.ugidotnet.org/sqlog/archive/2011/12/11/un-paio-di-libri.aspx Consiglio un paio di libretti per rilassare il neurone durante le ferie natalizie...<br /> <br /> <span style="font-weight: bold;">Arduino. La guida ufficiale</span>: l’ho quasi finito di leggere. Un libro che vi introduce nel fantastico mondo di Arduino e dell’elettronica. L’autore (tra le altre cose ingegnere che ha partecipato alla progettazione di Arduino stesso) è molto bravo nell’accompagnare il lettore capitolo dopo capitolo nell’approfondire le varie tematiche.<br /> <br /> <a href="http://www.amazon.it/Arduino-guida-ufficiale-Informatica-Massimo/dp/8848124240/ref=sr_1_1?ie=UTF8&amp;qid=1323597891&amp;sr=8-1" target="_blank">http://www.amazon.it/Arduino-guida-ufficiale-Informatica-Massimo/dp/8848124240/ref=sr_1_1?ie=UTF8&amp;qid=1323597891&amp;sr=8-1</a><br /> <br /> <span style="font-weight: bold;">iWoz: Computer Geek to Cult Icon</span> e (<span style="font-style: italic;">ovviamente</span>) <span style="font-weight: bold;">Steve Jobs</span>: ho già ad entrambi dato una veloce occhiata e devo dire che trovo quello di “Woz” sicuramente più interessante. Forse per il modo di approcciare la discussione o per gli argomenti trattati... in ogni caso fra i due ad un primo impatto preferisco quello di Steve Wozniak.<br /> <br /> <a href="http://www.amazon.it/iWoz-Computer-Geek-Cult-ebook/dp/B000VUCIZO/ref=sr_1_3?ie=UTF8&amp;qid=1323599582&amp;sr=8-3" target="_blank">http://www.amazon.it/iWoz-Computer-Geek-Cult-ebook/dp/B000VUCIZO/ref=sr_1_3?ie=UTF8&amp;qid=1323599582&amp;sr=8-3</a><br /> <br /> <a href="http://www.amazon.it/Steve-Jobs-Italian-Edition-ebook/dp/B00606NPIW/ref=sr_1_4?ie=UTF8&amp;qid=1323598481&amp;sr=8-4" target="_blank">http://www.amazon.it/Steve-Jobs-Italian-Edition-ebook/dp/B00606NPIW/ref=sr_1_4?ie=UTF8&amp;qid=1323598481&amp;sr=8-4</a><br /> <br /> Questi ultimi due libri sono disponibili anche per Kindle.<img src="http://blogs.ugidotnet.org/sqlog/aggbug/100616.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2011/12/11/un-paio-di-libri.aspx Sun, 11 Dec 2011 12:49:04 GMT http://blogs.ugidotnet.org/sqlog/archive/2011/12/11/un-paio-di-libri.aspx#feedback 1 http://blogs.ugidotnet.org/sqlog/comments/commentRss/100616.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/100616.aspx Powershell e Svn Dump http://blogs.ugidotnet.org/sqlog/archive/2011/10/15/powershell-e-svn-dump.aspx Scrivo questo post, perché magari risparmio a qualcuno la perdita di circa un ora di tempo e un principio di infarto... :) <br /> <br /> Questa mattina aggiorno SVN alla versione 1.7. Rivedo gli script di backup, anche perché con la ver. 1.7 è stato introdotta una nuova utility -svnrdump- per eseguire il dump, e mi viene la brillante idea di utilizzare Powershell per eseguire gli script di backup e di verifica. <br /> <br /> Realizzo un dump di prova per verificare che tutto sia ok e per sicurezza eseguo anche il restore. Il dump va a buon fine ... il restore non tanto. In un primo momento penso che sia dovuto al cambio di versione, ma prestando più attenzione noto che il dump è di dimensione quasi doppie rispetto al precedente. C'è qualcosa che non torna. <br /> <br /> Esaminando il file di dump noto che il contenuto è formattato diversamente, quindi (per esclusione) riprovo a fare tutta la trafila senza utilizzare la Powershell, tutto torna a funzionare correttamente. <br /> <br /> A questo punto mi sorge il dubbio che la Powershell abbia una modalità di funzionamento (per quanto riguarda i comandi in pipe) che risulta essere non compatibile con SVN e facendo una ricerca con Google il mio dubbio sembrerebbe essere confermato. <br /> <br /> Farò altre indagini...<img src="http://blogs.ugidotnet.org/sqlog/aggbug/100453.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2011/10/15/powershell-e-svn-dump.aspx Sat, 15 Oct 2011 15:17:06 GMT http://blogs.ugidotnet.org/sqlog/archive/2011/10/15/powershell-e-svn-dump.aspx#feedback 2 http://blogs.ugidotnet.org/sqlog/comments/commentRss/100453.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/100453.aspx FlyJSONP http://blogs.ugidotnet.org/sqlog/archive/2011/09/10/flyjsonp.aspx Un utile libreria per gestire richieste (get e post) cross-domain via json. <br /> <br /> <a href="http://alotaiba.github.com/FlyJSONP/" target="_blank">http://alotaiba.github.com/FlyJSONP/</a> <img src="http://blogs.ugidotnet.org/sqlog/aggbug/100335.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2011/09/10/flyjsonp.aspx Sat, 10 Sep 2011 23:16:24 GMT http://blogs.ugidotnet.org/sqlog/archive/2011/09/10/flyjsonp.aspx#feedback http://blogs.ugidotnet.org/sqlog/comments/commentRss/100335.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/100335.aspx Python 3.2.2 http://blogs.ugidotnet.org/sqlog/archive/2011/09/05/python-3.2.2.aspx Rilasciato ... <a target="_blank" href="http://www.python.org/download/releases/3.2.2/"> http://www.python.org/download/releases/3.2.2/ </a><img src="http://blogs.ugidotnet.org/sqlog/aggbug/100324.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2011/09/05/python-3.2.2.aspx Mon, 05 Sep 2011 21:48:37 GMT http://blogs.ugidotnet.org/sqlog/archive/2011/09/05/python-3.2.2.aspx#feedback http://blogs.ugidotnet.org/sqlog/comments/commentRss/100324.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/100324.aspx Python & .NET http://blogs.ugidotnet.org/sqlog/archive/2011/09/01/python-.net.aspx E' stato rilasciato l'IDE per Visual Studio 2010 per Python:<br /> <br /> <a href="http://pytools.codeplex.com/" target="_blank"><span style="text-decoration: underline;">http://pytools.codeplex.com/</span></a><img src="http://blogs.ugidotnet.org/sqlog/aggbug/100317.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2011/09/01/python-.net.aspx Thu, 01 Sep 2011 22:41:10 GMT http://blogs.ugidotnet.org/sqlog/archive/2011/09/01/python-.net.aspx#feedback http://blogs.ugidotnet.org/sqlog/comments/commentRss/100317.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/100317.aspx Amazon Kindle! http://blogs.ugidotnet.org/sqlog/archive/2011/08/25/amazon-kindle.aspx Lunedì avevo fatto l'ordine per acquistare un Kindle sul web site Amazon.com. Ho notato che ancora Amazon non ha messo a disposizione il Kindle qui in Italia <img src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif" alt="" />.<br /> Detto questo ieri mi è stato consegnato in ufficio... <img src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/teeth_smile.gif" alt="" /><br /> Il pacchetto che contiene il Kindle è interamente in cartone, spacchettato il contenuto è costituito dal suddetto Kindle, un cavetto USB e un breve manuale.<br /> Essenziale. <br /> <br /> Quello che mi ha colpito è stato che una volta spacchettato il lettore, noto che sul display è presente una scritta. In un primo momento pensavo che fosse un semplice foglio illustrativo e vado (o tento) per toglierlo, scoprendo che in verità il lettore era già acceso!! <img src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/tounge_smile.gif" alt="" /><br /> <br /> Il display è davvero notevole! La lettura avviene in maniera assolutamente naturale e non risulta assolutamente "stressante" per gli occhi. Il peso è contenuto e sia le braccia che i polsi non ne risentono anche dopo qualche ora. Se poi si ha l'accortezza di regolare le opzioni che riguardano la visualizzazione dei font... il gioco è fatto. <br /> <br /> Ho preso il 6 pollici.<br /> Non sapendo se lo avessi trovato comodo ho voluto evitare di prendere il modello da 10', ma se da qui a qualche mese non riscontro grossi problemi probabilmente acquisterò anche il modello più grande.<br /> Lo inauguro con due libri: "Metro 2033" e "Start Small, Stay Small: A Developer's Guide to Launching a Startup". <br /> <br /> Alla prossima... <img src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/wink_smile.gif" alt="" /><img src="http://blogs.ugidotnet.org/sqlog/aggbug/100300.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2011/08/25/amazon-kindle.aspx Thu, 25 Aug 2011 20:03:24 GMT http://blogs.ugidotnet.org/sqlog/archive/2011/08/25/amazon-kindle.aspx#feedback http://blogs.ugidotnet.org/sqlog/comments/commentRss/100300.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/100300.aspx TortoiseSVN e Ommwriter http://blogs.ugidotnet.org/sqlog/archive/2011/08/24/tortoisesvn-e-ommwriter.aspx <p style="font-family: Verdana;"><font size="2">Qualche settimana fa è stata rilasciata la nuova release di <a href="http://tortoisesvn.net/" target="_blank">TortoiseSVN</a> (1.7 Beta2). <a href="http://tortoisesvn.net/tsvn_1.7_releasenotes.html" target="_blank">Tante piccole novità</a> sia a livello di funzionalità che per quanto riguarda l'integrazione con il sistema operativo. Se si possiede Windows 7 il nostro TortoiseSVN si integrerà molto meglio non solo con la shell (menu click destro del mouse) ma anche con il menu in alto. Segnalo anche, per i possessori di Total Commander, che adesso anche utilizzando la versione X64 di TortoiseSVN è possibile eseguire direttamente le varie operazioni senza dover passare dall'apposito menu (X64) e sono sempre visibili gli overlay sulle icone (yeaaaaa!).</font></p> <p style="font-family: Verdana;"><font size="2"><br /> Altro programmino che segnalo è quello con cui sto editando questo post. E' un editor un po vecchiotto, uscito qualche tempo fa (se non sbaglio) su Mac e ultimamente "portato" anche su Windows. <a href="http://www.ommwriter.com" target="_blank">Ommwriter</a>. Vi lascio scoprire a voi potenzialità e limiti... <img src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/wink_smile.gif" alt="" /></font></p> <p style="font-family: Verdana;"><font size="2"><br /> alla prossima...</font></p><img src="http://blogs.ugidotnet.org/sqlog/aggbug/100294.aspx" width="1" height="1" /> pietro partescano http://blogs.ugidotnet.org/sqlog/archive/2011/08/24/tortoisesvn-e-ommwriter.aspx Wed, 24 Aug 2011 09:55:47 GMT http://blogs.ugidotnet.org/sqlog/archive/2011/08/24/tortoisesvn-e-ommwriter.aspx#feedback http://blogs.ugidotnet.org/sqlog/comments/commentRss/100294.aspx http://blogs.ugidotnet.org/sqlog/services/trackbacks/100294.aspx