• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Scrivere un'estensione per PostgreSQL 9.1
 

Scrivere un'estensione per PostgreSQL 9.1

on

  • 382 views

A partire dalla versione 9.1 PostgreSQL fornisce la possibilità di raggruppare un insieme di oggetti (tipi di dato, tabelle, funzioni, operatori, ecc..) all'interno di un'estensione....

A partire dalla versione 9.1 PostgreSQL fornisce la possibilità di raggruppare un insieme di oggetti (tipi di dato, tabelle, funzioni, operatori, ecc..) all'interno di un'estensione.

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 un'estensione. In questo intervento si mostrerà come creare una semplice estensione e il suo utilizzo pratico.

Statistics

Views

Total Views
382
Views on SlideShare
377
Embed Views
5

Actions

Likes
0
Downloads
3
Comments
0

2 Embeds 5

http://www.devise.it 4
http://staging.devise.it 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Scrivere un'estensione per PostgreSQL 9.1 Scrivere un'estensione per PostgreSQL 9.1 Presentation Transcript

    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011Scrivere unestensione per PostgreSQL 9.1 Marco Nenciarini Italian PostgreSQL Users Group www.itpug.org www.postgresql.org Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Marco Nenciarini• DBA, sviluppatore e sysadmin presso 2ndQuadrant – Database OLTP business critical – Data warehousing• Membro della comunità di PostgreSQL – Co-Fondatore di ITPUG• Debian Developer Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Sommario• Perché le estensioni• Anatomia di unestensione• Installazione• Manutenzione e aggiornamento• PGXN• Conclusioni Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Ecosistema PostgreSQL• Estensibilità• Ricca documentazione• Grande quantità di moduli aggiuntivi – 46 Contrib, molteplici estensioni, estensioni private – PostGIS, hstore, adminpack, dblink, ltree, pgq, ip4r, intagg, cube, pgfincore, pgcrypto, citext, pg_trgm, wildspeed, temporal, prexpg_stattuple, pg_freespacemap, pg_stat_statements, … Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Prima di PostgreSQL 9.1• Installazione tramite scriptapt-get install postgresql-contrib-9.0psql -f /usr/share/postgresql/9.0/contrib/cube.sql• Lo script sql può contenere molti oggetti• Tutti gli oggetti vengono creati nello schema di default• Difficoltà di gestione in database multi-schema Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Perché le estensioni• Supporto migliore per dump e restore• Separazione logica fra lestensione e gli altri oggetti presenti nel database – Non fa parte dei dati – È una dipendenza dei dati• Installazione in uno schema specifico• Operazioni di manutenzione semplificateCREATE EXTENSION IF NOT EXISTS cube WITH SCHEMA public; Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Anatomia di unestensione• File di controllo – Metadati – Impostazioni – Dipendenze• Script SQL di installazione – Nessuna nuova sintassi da imparare – Ambiente di esecuzione controllato• Script SQL di aggiornamento (opzionali)• Moduli binari (opzionali) Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Il file di controllo• In ${SHAREDIR}/extension• Si deve chiamare <nome_estensione>.control• Sintassi chiave/valore (come postgresql.conf)$ cat /usr/share/postgresql/9.1/extension/pair.control# pair extensioncomment = A key/value pair data typedefault_version = 1.0relocatable = true Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Lo script di installazione• <estensione>--<versione>.sql• È un normale script SQL• Viene eseguito allinterno di una transazione – No BEGIN/COMMIT/ROLLBACK• Ambiente controllato – Tutto quello che viene creato fa parte dellestensione• Due sostituzioni possibili – MODULE_PATHNAME – @extschema@• Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: pair--1.0.sqlCREATE TYPE pair AS ( k text, v text );ALTER EXTENSION pair DROP TYPE _pair; -- bug 9.1CREATE OR REPLACE FUNCTION pair(text, text)RETURNS pairLANGUAGE SQL AS SELECT ROW($1, $2)::pair;;CREATE OPERATOR ~> ( LEFTARG = text, RIGHTARG = text, PROCEDURE = pair); Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: estensione non rilocabile• Se lestensione necessita conoscere schema di destinazione durante linstallazione essere marcata come non rilocabile – Usare @extschema@ come segnaposto per lo schema – relocatable = false• Se lestensione necessita di essere installata in uno schema specifico – relocatable = false – schema = schema_di_destinazione Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Installazione• CREATE EXTENSION – IF NOT EXISTS – SCHEMA <schema_esistente> – VERSION <versione> – FROM <versione_modulo>CREATE EXTENSION hstore;CREATE EXTENSION cube FROM unpackaged; Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Ispezione da psqlpostgres=# dx List of installed extensions Name | Version | Schema | Description------+---------+--------+---------------------------- pair | 1.0 | pair | A key/value pair data type(1 row)postgres=# dx+ Objects in extension "pair" Object Description------------------------------- function pair.pair(text,text) operator pair.~>(text,text) type pair.pair(3 rows) Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Supporto per il dump/restore• Lestensione è una dipendenza – Una sola riga nel dump (commenti esclusi)• Lestensione può contenere tabelle – Le tabelle non compaiono nel dump – Ma le tabelle possono essere modificate!$ pg_dump | grep pair-- Name: pair; Type: EXTENSION; Schema: -; Owner:CREATE EXTENSION IF NOT EXISTS pair WITH SCHEMA public;-- Name: EXTENSION pair; Type: COMMENT; Schema: -; Owner:COMMENT ON EXTENSION pair IS A key/value pair data type; Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 TabelleCREATE TABLE extconfig ( key text, value text, standard_entry boolean);SELECT pg_catalog.pg_extension_config_dump( extconfig, WHERE NOT standard_entry);Supporto per tabelle di configurazione – Dump del solo contenuto – Possibilità di discriminare fra dati di default e dati aggiuntivi Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Manutenzione• Aggiornamento atomicoALTER EXTENSION pair UPDATE;• Rilocazione in uno schema diversoALTER EXTENSION pair SET SCHEMA pair; Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Gli script di aggiornamento• <estensione>--<da_versione>--<a_versione>.sql• Stessa sintassi dello script di installazione• Strada più corta per la versione richiesta• Nessuna assunzione su ordinamento – Downgrade – Nomi simbolici• Funzione pg_extension_update_paths(estensione)• Versione “unpackaged” Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: pair--unpackaged--1.0.sql• Si basa su unestensione vuota• Aggiunge manualmente il contenuto del vecchio moduloALTER EXTENSION pair ADD TYPE pair;ALTER EXTENSION pair ADD FUNCTION pair(text, text);ALTER EXTENSION pair ADD OPERATOR ~> (text,text); Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: pair--1.0--1.1.sqlCREATE OR REPLACE FUNCTION pair(anyelement, anyelement)RETURNS pair LANGUAGE SQL AS SELECT ROW($1, $2)::pair;CREATE OR REPLACE FUNCTION pair(text, anyelement)RETURNS pair LANGUAGE SQL AS SELECT ROW($1, $2)::pair;CREATE OR REPLACE FUNCTION pair(anyelement, anyelement)RETURNS pair LANGUAGE SQL AS SELECT ROW($1, $2)::pair;CREATE OPERATOR ~> (LEFTARG = text, RIGHTARG = anyelement, PROCEDURE = pair);CREATE OPERATOR ~> (LEFTARG = anyelement, RIGHTARG = text, PROCEDURE = pair);CREATE OPERATOR ~> (LEFTARG = anyelement, RIGHTARG = anyelement, PROCEDURE = pair); Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: pg_extension_update_pathspostgres=# SELECT * FROM pg_extension_update_paths(pair); source | target | path------------+------------+---------------------- 1.0 | 1.1 | 1.0--1.1 1.0 | unpackaged | 1.1 | 1.0 | 1.1 | unpackaged | unpackaged | 1.0 | unpackaged--1.0 unpackaged | 1.1 | unpackaged--1.0--1.1(6 rows) Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 PostgreSQL eXtension Network - PGXN• http://pgxn.org/• Obiettivo: raccogliere tutte le estensioni open source• PGXN Client – simile a apt-get o yum • pgxn install estensione • pgxn search parola• PGXN Utils – Ausilio per lo sviluppatore di estensioni Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 META.json• Specifiche http://pgxn.org/spec/{   "name": "pair",   "abstract": "A key/value pair data type",   "version": "0.1.0",   "maintainer": "Marco Nenciarini <info@2ndQuadrant.it>",   "license": "postgresql",   "meta­spec": {      "version": "1.0.0",      "url": "http://pgxn.org/meta/spec.txt"   },} Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Conclusioni• Usare moduli aggiuntivi non è mai stato così facile• Vantaggi anche per chi sviluppa estensioni – Robustezza – Manutenibilità• Applicazioni come estensioni – Aggiornamento atomico – Packaging – Dump selettivo• Lenta migrazione dei moduli esistenti Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Domande?• E-Mail: marco.nenciarini@2ndquadrant.it• URL: www.2ndquadrant.it• Blog: blog.2ndquadrant.it Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
    • PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Licenza Creative CommonsAttribuzioneNon commercialeCondividi allo stesso modo2.5 Italiahttp://creativecommons.org/licenses/by-nc-sa/2.5/it/© 2011 2ndQuadrant Italia - http://www.2ndquadrant.it Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org