2ndQuadrant » PostgreSQL 9.1 https://blog.2ndquadrant.it Il blog sui database di 2ndQuadrant Italia Thu, 25 Jan 2018 11:36:59 +0000 en-US hourly 1 http://wordpress.org/?v=4.3.15 PostgreSQL 9.1 a Codemotion https://blog.2ndquadrant.it/postgresql_91_a_codemotion/ https://blog.2ndquadrant.it/postgresql_91_a_codemotion/#comments Tue, 20 Mar 2012 20:45:02 +0000 http://2ndblog.dev.xcon.it/postgresql_91_a_codemotion/ Questo fine settimana parteciperò a Codemotion 2012, con un intervento su PostgreSQL 9.1, rappresentando l’Associazione ITPUG – Italian PostgreSQL User Group.

Per partecipare non occorrerà una preparazione specialistica. Esempio: chi usa già un database, magari di tipo diverso, e vorrebbe approfittare per conoscere meglio PostgreSQL. Oppure chi deve gestire un progetto e sta valutando le tecnologie da usare, incluso il tipo di database. Oppure chi conosce già PostgreSQL, però una versione precedente, e vuole un breve aggiornamento in 40 minuti…

Dal momento che il mio co-autore Gabriele Bartolini si trova in Australia, presenterò l’intervento da solo. L’appuntamento è per venerdì e sabato prossimi a Roma, presso la facoltà di Ingegneria della terza Università. Di PostgreSQL 9.1 parleremo poi alle 14:10 di sabato; altri soci di ITPUG hanno annunciato la loro presenza.

L’idea di proporre questa comunicazione era venuta in realtà a Gabriele, entusiasta partecipante alla scorsa edizione con un intervento sempre su PostgreSQL. Non corriamo tuttavia il rischio di sovrapposizioni: grazie allo sviluppo inarrestabile di PostgreSQL è possibile proporre un intervento analogo, però con contenuti largamente nuovi.

Infatti, rispetto a 12 mesi fa ora c’è una nuova release (la 9.1), e tutte le novità allora preannunciate sono adesso parte di numerosi sistemi live; potrò quindi passare in rassegna le novità della 9.2, sia quelle confermate (JSON nativo, backup dallo standby, scansioni index-only, COUNT(*) veloce, …) che quelle ancora in ballo (trigger sui comandi, chiavi esterne sugli array, controllo sintattico di funzioni, …). Credo quindi che un eventuale spettatore di Codemotion 2011 non potrà annoiarsi, se non per ragioni indipendenti dalla quantità di fatti nuovi riguardanti PostgreSQL.

Ulteriori informazioni dopo la conferenza conclusa; per adesso vi dò appuntamento per venerdì e sabato a Roma…

]]>
https://blog.2ndquadrant.it/postgresql_91_a_codemotion/feed/ 0
Rilasciato PostgreSQL 9.1 https://blog.2ndquadrant.it/rilasciato_postgresql_91/ https://blog.2ndquadrant.it/rilasciato_postgresql_91/#comments Mon, 12 Sep 2011 14:26:00 +0000 http://2ndblog.dev.xcon.it/rilasciato_postgresql_91/ Il PostgreSQL Global Development Group annuncia il rilascio di PostgreSQL 9.1. Quest’ultima versione del leader dei database open source offre tecnologie innovative, estensibilità senza paragoni e nuove funzionalità come replica sincrona, estensioni, tabelle esterne ("foreign data wrapper"), indici "K-Nearest Neighbor".

Nei mesi scorsi, 2ndQuadrant aveva pubblicato una serie di articoli su alcune delle novità di PostgreSQL 9.1, fra cui tabelle unlogged, tabelle esterne ed estensioni.

"PostgreSQL 9.1 fornisce alcune delle più avanzate funzionalità a disposizione di tutti i database open source ed è sostenuto da una comunità attiva e innovativa, con dimostrata esperienza di successo in ambito aziendale. PostgreSQL è inoltre ben posizionato per costruire ed eseguire applicazioni nel cloud", afferma Charles Fan (Vice presidente, Dipartimento di Ricerca e sviluppo, VMware).

Risponde a importanti richieste degli utenti

La versione 9.1 introduce molte funzionalità che per anni sono state richieste dagli utenti, rimuovendo diverse barriere nell’adozione di nuove applicazioni o nella migrazione a PostgreSQL. Fra le altre, sono degne di nota:

  • replica sincrona: sicurezza e consistenza dei dati (perdita zero) all’interno di un cluster in alta disponibilità di server PostgreSQL;
  • collation a livello di colonna: definizione delle regole di ordinamento delle stringhe a livello di database, tabella o colonna;
  • tabelle "unlogged": miglioramenti prestazionali per dati volatili (i.e. caching o sessioni web).

"Heroku offre il più grande servizio cloud per PostgreSQL del mondo come ‘database-as-a-service’", svela James Lindenbaum, co-fondatore di Heroku. "Il rilascio della replica sincrona dei dati nella 9.1 fornisce ai nostri clienti modalità innovative per la protezione di dati mission-critical. Consacra inoltre PostgreSQL come una delle soluzioni di memorizzazione dati più dinamiche al momento disponibili".

Avanza lo stato dell’arte

La nostra comunità di sviluppatori è in grado di innovare con funzionalità all’avanguardia. La versione 9.1 ne comprende diverse che rappresentano vere e proprie novità nell’industria dei database anche non open source, come:

  • indicizzazione "K-Nearest-Neighbor": indici basati sul concetto di distanza, che permettono interrogazioni più veloci nel campo delle ricerche testuali e geografiche;
  • "Serializable Snapshot Isolation": garanzia di consistenza fra transazioni concorrenti senza necessariamente doverle bloccare, mettendo in pratica il concetto di "true serializability";
  • "Writeable Common Table Expression": esecuzione di complessi aggiornamenti ai dati su più passi, utilizzando una singola query;
  • "Security-Enhanced Postgres": implementa la sicurezza di livello militare e il controllo d’accesso vincolato ("Mandatory Access Control").

"OpenERP si è sempre avvalso delle funzionalità di classe enterprise di PostgreSQL per dotare di una base veloce, affidabile e scalabile le applicazioni che aiutano a gestire le operazioni quotidiane delle aziende nostre clienti. L’integrità dei dati in contesti altamente concorrenti e transazionali è un argomento di importanza critica per noi, e siamo veramente entusiasti della funzionalità ‘Serializable Snapshot Isolation’ introdotta in PostgreSQL 9.1!", aggiunge Olivier Dony, Community Manager di OpenERP.

Estende il motore del database

L’estensibilità di PostgreSQL consente agli utenti di aggiungere nuove funzionalità ad un database già in produzione e di sfruttarlo per compiti che nessun altro sistema di gestione di database è in grado di fare. La versione 9.1 aggiunge nuovi strumenti per l’estensibilità, fra cui:

  • tabelle esterne tramite "Foreign Data Wrapper": permette di collegare e interrogare altri database direttamente da PostgreSQL;
  • estensioni: rende più facile creare, caricare e gestire nuove funzionalità del database.

Tutte le funzionalità descritte sopra e molte altre sono descritte in dettaglio sia nella pagina del wiki di PostgreSQL intitolata "What’s New In 9.1" che nelle note di rilascio.

Nel 25° anniversario dello sviluppo del database PostgreSQL, la nostra comunità continua a migliorare la tecnologia dei database ad ogni rilascio annuale. Scarica subito la versione 9.1 e prova il più avanzato sistema di database open source al mondo.

Su PostgreSQL: PostgreSQL è il leader dei sistemi di gestione di database open source, con una comunità internazionale costituita da migliaia di utenti e sviluppatori nonché decine di aziende ed enti provenienti da tutte le parti del mondo. Il progetto PostgreSQL vanta 25 anni di attività di ingegneria del software, cominciata all’Università di California a Berkeley e oggi può vantare un ritmo di sviluppo senza uguali. La gamma di funzionalità mature messe a disposizione da PostgreSQL non soltanto è in grado di competere con quelle offerte da sistemi di database proprietari, ma le migliora in termini di funzionalità avanzate, estensibilità, sicurezza e stabilità. Scopri maggiori informazioni su PostgreSQL e partecipa attivamente alla nostra comunità su http://www.postgresql.org e, per l’Italia, http://www.itpug.org.

Per maggiori informazioni in italiano sul rilascio: Press Kit di PostgreSQL 9.1

]]>
https://blog.2ndquadrant.it/rilasciato_postgresql_91/feed/ 0
PostgreSQL 9.1: Tabelle esterne con SQL/MED https://blog.2ndquadrant.it/postgresql_91_tabelle_esterne/ https://blog.2ndquadrant.it/postgresql_91_tabelle_esterne/#comments Mon, 13 Jun 2011 11:13:14 +0000 http://2ndblog.dev.xcon.it/postgresql_91_tabelle_esterne/ SQL/MED rappresenta la parte dello standard SQL dedicata alla gestione dei dati esterni (Management of External Data). Anche se SQL/MED è disponibile già a partire da PostgreSQL 8.4, nella versione 9.1 è stata introdotta la possibilità di definire tabelle speciali, dette "foreign", per accedere a dati esterni al database tramite semplici SELECT.

Questo articolo mostra la procedura da seguire per creare una tabella esterna contenente dati ricavati da un file CSV locale e sfrutta un’altra caratteristica introdotta in PostgreSQL 9.1: le estensioni.

Prima di tutto, è necessario installare una estensione chiamata file_fdw distribuita nei moduli contrib di PostgreSQL 9.1.

Per installare i moduli contrib di PostgreSQL 9.1 dai sorgenti è sufficiente compilarli con gmake world e installarli con gmake install-world, oppure entrare nella directory contrib degli stessi sorgenti e digitare gmake install.

Una volta installati i moduli contrib, le estensioni si troveranno in ${postgresql_prefix}/share/extension. Controllate che esistano i file file_fdw.control e file_fdw--1.0.sql, che definiscono l’estensione (si rimanda all’articolo sulle estensioni per maggiori informazioni).

Creare l’estensione con:

CREATE EXTENSION file_fdw;

Il comando psql per mostrare le estensioni è dx, che possiede anche la variante dx+, che mostra maggiori dettagli:

test_db=# dx+ file_fdw
Objects in extension "file_fdw"
Object Description
-----------------------------------------
foreign-data wrapper file_fdw
function file_fdw_handler()
function file_fdw_validator(text[],oid)
(3 rows)

Si noti che questa estensione crea automaticamente un oggetto di tipo FOREIGN DATA WRAPPER di nome file_fdw, che tornerà utile in seguito.

Dato che SQL/MED può gestire la copia dei dati anche attraverso database remoti, è necessario creare un server usando l’oggetto file_fdw (questo passo è necessario anche nel caso si stiano caricando dati da un file locale, come in questo esempio):

CREATE SERVER file FOREIGN DATA WRAPPER file_fdw ;

A questo punto, è possibile creare la tabella esterna caricando i dati, con:

CREATE FOREIGN TABLE statistical_data (field1 numeric, field2 numeric)
SERVER file
OPTIONS (filename '/tmp/statistical_data.csv', format 'csv', delimiter ';') ;

Attualmente, è possibile eseguire solo query di sola lettura tramite SELECT sulle tabelle foreign. Le tabelle foreign inoltre, funzionano anche attraverso dblink, il tool che permette la comunicazione tra database remoti.

Concludendo, questa caratteristica va a completare una piccola lacuna che Postgres aveva rispetto ad altri database. Va pertanto accolta con grande interesse data la sua utilità, specialmente nel settore del data warehousing, in particolare dell’estrazione e del caricamento dati (ETL), e in più in generale per l’integrazione del database con altri sistemi e altre fonti di dati.

Per maggiori informazioni si rimanda alla documentazione di PostgreSQL sul comando CREATE FOREIGN TABLE.

]]>
https://blog.2ndquadrant.it/postgresql_91_tabelle_esterne/feed/ 1
PostgreSQL 9.1: le tabelle “Unlogged” https://blog.2ndquadrant.it/postgresql_91_tabelle_unlogged/ https://blog.2ndquadrant.it/postgresql_91_tabelle_unlogged/#comments Mon, 06 Jun 2011 09:00:10 +0000 http://2ndblog.dev.xcon.it/postgresql_91_tabelle_unlogged/ Una delle novità introdotte in Postgres 9.1 è rappresentata dalle tabelle "unlogged". Queste tabelle non producono file WAL, cioè quei file che contengono i log delle operazioni di scrittura sulle tabelle.

Eliminando del tutto la scrittura dei file WAL e di conseguenza l’operazione di fsync() al momento del COMMIT della transazione, aumenta considerevolmente la velocità di scrittura su queste particolari tabelle:


postgres=# CREATE TABLE tabella-normale AS SELECT generate_series( 1,1000000 );
SELECT 1000000
Time: 7626.138 ms
postgres=# CREATE UNLOGGED TABLE tabella-unlogged AS SELECT generate_series( 1,1000000 );
SELECT 1000000
Time: 503.786 ms

D’altra parte, l’assenza di file WAL relativi alle operazioni sulla tabella fa sì che il contenuto delle tabelle unlogged non venga mantenuto dopo un riavvio del server causato da un crash (potete divertirvi a provare questo comportamento usando il comando kill sul processo server – preferibilmente non in produzione).

Inoltre, se si usa un sistema di replica come warm standby o hot standby, il contenuto delle tabelle unlogged non viene replicato sui vari slave.

Concludendo, questa nuova funzionalità introduce vantaggi per la memorizzazione di dati facilmente generabili e non durabili. Un caso d’uso comune potrebbe essere il caching, dove la velocità di scrittura è fondamentale e allo stesso tempo non ci si deve preoccupare della persistenza dei dati dopo un crash del server.

Per maggiori informazioni: http://www.postgresql.org/docs/9.1/static/sql-createtable.html.

ll presente articolo è ispirato dal Wiki sulle novità della release 9.1 redatto dalla comunità PostgreSQL.

]]>
https://blog.2ndquadrant.it/postgresql_91_tabelle_unlogged/feed/ 0
PostgreSQL 9.1: Le estensioni https://blog.2ndquadrant.it/postgresql_9_1_le_estensioni/ https://blog.2ndquadrant.it/postgresql_9_1_le_estensioni/#comments Mon, 18 Apr 2011 10:05:41 +0000 http://2ndblog.dev.xcon.it/postgresql_9_1_le_estensioni/ Una delle caratteristiche più interessanti introdotte in PostgreSQL 9.1 è sicuramente la possibilità di creare delle EXTENSION.

Questa funzionalità risolverà il problema noto a tutti i DBA PostgreSQL che riguardava la gestione delle estensioni (ad esempio PostGIS), in cui ad ogni upgrade di versione le funzioni e i tipi di dato propri dell’estensione si mischiavano con gli altri oggetti del database. Dalla versione 9.1, se opportunamente sviluppate, verranno viste nelle operazioni di dump/restore come un semplice contenitore esterno.

Una EXTENSION è semplicemente un contenitore di oggetti SQL (per esempio tabelle, funzioni, tipi ecc…).

L’idea che molteplici oggetti del database possano essere considerati come un’unica entità porta notevoli vantaggi in termini di gestione e design del database, in quanto con un solo comando si possono aggiungere, modificare o cancellare tutti gli oggetti contenuti in una estensione.

Una caratteristica che ho trovato particolarmente interessante è sicuramente la possibilità di definire dipendenze tra EXTENSION diverse, il che rende ancora più strutturato e facilmente gestibile il design del database.

Ecco un semplice esempio di EXTENSION:

Un’estensione ha bisogno di almeno 2 file, uno chiamato .control e almeno uno chiamato .sql. Entrambi i file devono risiedere nella directory "extension" presente nella share di Postgres (anche se nel file .control è possibile indicare un path diverso per il/i file .sql).

Un esempio di file hello–1.0.sql:

CREATE OR REPLACE FUNCTION hello_f()
RETURNS TEXT LANGUAGE SQL AS 'SELECT ''Hello World''::TEXT';

E relativo file hello.control:

comment = 'A trivial extension'
default_version = '1.0'
superuser = false

Una volta creati questi due file, è possibile effettuare alcune operazioni, ad esempio:


CREATE EXTENSION hello;
DROP EXTENSION hello; # Cancella tutti gli oggetti
# contenuti nell'estensione
ALTER EXTENSION hello [ADD | DROP] member_object
ALTER EXTENSION hello SET SCHEMA nuovo_schema
ALTER EXTENSION hello UPDATE [TO nuova_versione]

Si rimanda alla documentazione ufficiale di PostgreSQL per maggiori informazioni.

Sono convinto che la facilità di utilizzo e l’estrema utilità renderanno le EXTENSION una delle caratteristiche più apprezzate dagli utilizzatori di PostgreSQL in futuro – oltre che un notevole vantaggio nello sviluppo del software per noi che facciamo consulenze di professione.

]]>
https://blog.2ndquadrant.it/postgresql_9_1_le_estensioni/feed/ 0