PostgreSQL

De Viquipèdia
Dreceres ràpides: navegació, cerca
PostgreSQL
Logo de Postgresql
Logo de Postgresql
Desenvolupador(s) PostgreSQL Global Development Group
Versió estable

9.3.4
9.2.8
9.1.13
9.0.17
8.4.21

/ Març 20, 2014; fa 6 mesos (2014-03-20)
Sistema operatiu Multiplataforma
Tipus SGBD
Llicència BSD
Lloc web www.postgresql.org

PostgreSQL és un programari lliure que implementa un sistema de gestió de bases de dades relacional, distribuït sota llicència BSD.

Ofereix una alternativa a altres sistemes de gestió de base de dades (com ara MySQL, Firebird, i MaxDB), i de sistemes de programari propietari com Oracle, Sybase, DB2 d'IBM i Microsoft SQL Server.

Nom del producte[modifica | modifica el codi]

L'ús de caràcters en majúscula en el nom PostgreSQL pot confondre a algunes persones a primera vista. Les diferents pronunciacions de "SQL" poden portar a confusió. Els desenvolupadors de PostgreSQL ho pronuncien /po?st ???s kju? ?l/;. És també comú referir-s'hi com a simplement "Postgres", el que fou el seu nom original. A causa del seu suport de l'estàndard SQL, comú entre la major part de bases de dades relacionals, la comunitat va considerar canviar el nom a l'anterior Postgres. No obstant això, el PostgreSQL Core Team va anunciar en 2007 que el producte seguiria dient-se PostgreSQL. El nom fa referència als orígens del projecte com la base de dades "post-Ingres", i els autors originals també van desenvolupar la base de dades Ingres.

Història[modifica | modifica el codi]

PostgreSQL ha tingut una llarga evolució, la qual s'inicià el 1982 amb el projecte Ingres a la Universitat de Berkeley. Aquest projecte, liderat per Michael Stonebraker, va ser un dels primers intents d'implementar un motor de base de dades relacional. Després d'haver treballat força temps desenvolupant l'Ingres i d'haver-hi tingut una experiència comercial, Michael va decidir tornar a la Universitat el 1985 per treballar en un nou projecte basat en l'experiència d'Ingres. Aquest projecte va ser anomenat post-ingres o simplement POSTGRES.

El projecte post-ingres pretenia resoldre els problemes amb el model de base de dades relacional que havien estat aclarits al començament dels anys 1980. El principal d'aquests problemes era la incapacitat del model relacional de comprendre "tipus", és a dir, combinacions de dades simples que conformen una única unitat. Actualment, i quan s'hi afegeixen mètodes que n'encapsulen la funcionalitat, s'anomenen objectes. Es van esforçar a introduir la menor quantitat possible de funcionalitats per completar el suport de tipus. Aquestes funcionalitats incloïen l'habilitat de definir tipus, però també l'habilitat de descriure relacions - les quals fins a aquest moment eren àmpliament utilitzades però mantingudes completament per l'usuari. A Postgres la base de dades «comprenia» les relacions i podia obtenir informació de taules relacionades utilitzant regles. Postgres va usar moltes idees d'Ingres però no el seu codi.

La següent llista mostra les fites més importants en la vida del projecte Postgres.

  • 1986: es van publicar diversos papers que descrivien les bases del sistema.
  • 1988: ja es comptava amb una versió utilitzable.
  • 1989: el grup publicava la versió 1 per a una petita comunitat d'usuaris.
  • 1990: es publicava la versió 2 la qual tenia pràcticament reescrit el sistema de regles.
  • 1991: publicació de la versió 3, aquesta afegia la capacitat de múltiples motors d'emmagatzematge.
  • 1993: creixement important de la comunitat d'usuaris, la qual demandava més característiques.
  • 1994: després de la publicació de la versió 4, el projecte va acabar i el grup es va dissoldre.

Després que el projecte POSTGRES acabés, dos graduats de la universitat, Andrew Yu i Jolly Chen, van començar a treballar sobre el codi de POSTGRES, això va ser possible atès que POSTGRES estava llicenciat sota la BSD, i el primer que van fer va ser afegir suport per al llenguatge SQL a POSTGRES, atès que anteriorment comptava amb un intèrpret del llenguatge de consultes QUEL (basat en Ingres), creant així el sistema al qual van anominar Postgres95.

Cap al 1996 es van unir al projecte persones alienes a la Universitat com Marc Fournier d'Hub.Org Networking Services, Bruce Momjian i Vadim B. Mikheev els quals van proporcionar el primer servidor de desenvolupament no universitari per a l'esforç de desenvolupament de codi obert i van començar a treballar per tal d'estabilitzar el codi de Postgres95.

L'any 1996 van decidir canviar el nom de Postgres95 de tal manera que reflectís la característica del llenguatge SQL i van acabar anomenant-lo PostgreSQL, la primera versió del qual de codi obert va ser publicada l'1 d'agost de 1996. La primera versió formal de PostgreSQL (6.0) va ser publicada al gener de 1997. Des de llavors, molts desenvolupadors entusiastes dels motors de base de dades s'han unit al projecte, s'han coordinat via Internet i entre tots han anat incorporant moltes característiques al motor.

Tot i que la llicència permetia la comercialització de PostgreSQL, el codi no es va desenvolupar en principi amb finalitats comercials; cosa sorprenent considerant els avantatges que oferia. La principal derivació es va originar quan Paula Hawthtorn (un membre de l'equip original d'Ingres que es va passar a Postgres) i Michael Stonebraker van fundar Illustra Information Technologies per comercialitzar Postgres.

El 2000, ex inversors de Xarxa Hat van crear l'empresa Great Bridge per a comercialitzar PostgreSQL i competir contra proveïdors comercials de bases de dades. Great Bridge va afavorir a diversos desenvolupadors de PostgreSQL i va fer, en contrapartida, donació de recursos a la comunitat. No obstant això, a finals de 2001 va tancar a causa de la dura competència d'empreses com a Xarxa Hat i les difícils condicions del mercat.

El 2001, Command Prompt, Inc. va publicar Mammonth PostgreSQL, la més antiga distribució comercial de PostgreSQL. Continua donant suport a la comunitat PostgreSQL a través del patrocini de desenvolupadors i projectes, incloent-hi PL/Perl, PL/php i l'allotjament de projectes de comunitats com PostgreSQL Build Farm.

Al gener de 2005, PostgreSQL va rebre suport del proveïdor de base de dades Pervasive Software, conegut pel seu producte Btrieve que s'utilitzava a la plataforma Novell Netware, Pervasive va anunciar suport comercial i participació comunitària i va aconseguir una mica d'èxit. No obstant això, al juliol de 2006 va deixar el mercat de suport de PostgreSQL.

A mitjan 2005 dues companyies més van anunciar plans per comercialitzar PostgreSQL, fent èmfasi en nínxols separats de mercats. EnterpriseDB va afegir funcionalitats que permetien que les aplicacions escrites per treballar amb Oracle fossin fàcils d'adapatar per a la seva execució amb PostgreSQL. Greenplum va contribuir millores directament orientades a aplicacions de Data Warehouse i intel·ligència de negocis, incloent-hi el projecte BizGres.

A l'octubre de 2005, John Loiacono, vicepresident executiu de programari a Sun Microsystems va comentar: "No pretenem ser revenedors de Microsoft, però estem fixant-nos en PostgreSQL", sense entrar en detalls. Cap al novembre de 2005, Sun Solaris 10 (versió 6/06) incloïa PostgreSQL.

A l'agost de 2007 EnterpriseDB va anunciar el Postgres Resource Center i EnterpriseDB Postgres, dissenyats per ser una distribució de PostgreSQL completament configurada amb molts mòduls contribuïts i agregats. EnterpriseDB Postgres va canviar el seu nom per Postgres Plus al març de 2008.

El projecte PostgreSQL continua publicant versions principals anualment i versions menors de correcció d'errades (bugs), totes disponibles sota la llicència BSD, i basades en contribucions de proveïdors comercials, empreses que hi donen suport i programadors de codi obert majorment.

Característiques[modifica | modifica el codi]

Algunes de les principals caractéristiques del PostgreSQL són, entre altres:

Alta concurrència[modifica | modifica el codi]

Mitjançant un sistema denominat MVCC (Accés concurrent multiversió, per les seves sigles en anglès) PostgreSQL permet a un procés escriure en una taula, mentre d'altres hi accedeixen, sense bloquejar-se mútuament. Cada usuari obté una visió consistent de les últimes dades que han estat confirmades (commit). Aquesta estratègia es considera millor que l'ús de bloquejos per taula o per files, comuna en altres bases. S'elimina la necessitat de l'ús de bloquejos explícits.

Àmplia varietat de tipus natius[modifica | modifica el codi]

PostgreSQL suporta nadivament:

A més a més, els usuaris poden crear els seus propis tipus de dades, que poden ser indexables mercès a la infraestructura GiST de PostgreSQL. Alguns exemples són els tipus de dades d'informació geogràfica (GIS) creats pel projecte PostGIS.

Altres característiques[modifica | modifica el codi]

  • Claus foranes també denominades Claus alienes (foreign keys).
  • Disparadors (triggers): Un disparador o trigger es defineix com a una acció específica basada en algun esdeveniment a la base de dades. En el cas del PostgreSQL això significa l'execució d'un procediment emmagatzemat després que es dugui a terme una determinada acció, o quan s'avisa que aquesta acció està a punt de dur-se a terme (i abans que es dugui a terme), sobre una o diverses files d'una taula específica. Els disparadors es defineixen per sis característiques:
    • El nom del disparador o trigger
    • El moment en què el disparador ha d'activar-se (abans o després d'una certa acció)
    • L'esdeveniment concret que activarà el disparador (el fet que s'afegeixin o modifiquin dades d'una fila d'una relació, per exemple)
    • La taula on el disparador s'activarà
    • La freqüència de l'execució (un cop per cada fila, o un cop per cada relació, per exemple)
    • La funció que ha de ser cridada

Combinant aquestes sis característiques, el PostgreSQL permet crear una àmplia funcionalitat a través del seu sistema de disparadors:

  • Vistes.
  • Integritat transaccional i relacional.
  • Herència de taules.
  • Tipus de dades i operacions geomètriques.
  • Suport per a transaccions distribuïdes. Permet a PostgreSQL integrar-se en un sistema distribuït format per diversos recursos (p.e., una base de dades PostgreSQL, una altra Oracle, una cua de missatges IBM MQ JMS i un ERP SAP) gestionat per un servidor d'aplicacions on l'èxit ("commit") de la transacció global és el resultat de l'èxit de les transaccions locals.

Funcions[modifica | modifica el codi]

Blocs de codi que s'executen en el servidor. Poden ser escrits en diversos llenguatges, amb la potència que cadascun d'ells dóna, des de les operacions bàsiques de programació, com ara bifurcacions i bucles, fins a les complexitats de la programació orientada a objectes o la programació funcional.

Els disparadors (triggers en anglès) són funcions enllaçades a operacions sobre les dades.

Alguns dels llenguatges que es poden usar són els següents:

PostgreSQL permet funcions que retornin "files". Els valors retornats per aquestes funcions es tracten de la mateixa manera que una fila retornada per una consulta.

Les funcions poden ser definides per executar-se amb els drets de l'usuari executor o amb els drets d'un usuari prèviament definit. Allò que el PostgreSQL anomena "funcions", en altres sistemes de bases de dades, s'anomena sovint "procediments emmagatzemats" (stored procedures en anglès).

Llançaments[modifica | modifica el codi]

Versió Primera publicació Darrera versió Darrera publicació Novetats
0.01 01-05-1995 0.03 Una versió antiga, sense suport: 21-07-1995 Primera publicació com Postgres95
1.0 05-09-1995 1.09 Una versió antiga, sense suport: 04-11-1996 Es canvia el copyright cap a una llicéncia més oberta
6.0 29-01-1997 Canvi de nom de Postgres95 a PostgreSQL, índexs unique, utilitat pg_dumpall, autenticació ident.
6.1 08-06-1997 6.1.1 Una versió antiga, sense suport: 22-07-1997 Índexs Multi-columna, seqüències, tipus de dada money, GEQO (GEnetic Query Optimizer).
6.2 02-10-1997 6.2.1 Una versió antiga, sense suport: 17-10-1997 interfície JDBC, triggers, interfície de programació de servidors, restriccions.
6.3 01-03-1998 6.3.2 Una versió antiga, sense suport: 07-04-1998 compatibilitat subselect de SQL92, PL/pgTCL
6.4 30-10-1998 6.4.2 Una versió antiga, sense suport: 20-12-1998 VIEW i RULE, PL/pgSQL
6.5 09-06-1999 6.5.3 Una versió antiga, sense suport: 13-10-1999 MVCC, taules temporals, suport a més sentències d'SQL (CASE, INTERSECT i EXCEPT)
7.0 08-05-2000 7.0.3 Una versió antiga, sense suport: 11-11-2000 Claus forànies, sintaxis SQL92 per als joins
7.1 13-04-2001 7.1.3 Una versió antiga, sense suport: 15-08-2001 Write-ahead log, Outer joins
7.2 04-02-2002 7.2.8 Una versió antiga, sense suport: 09-05-2005 PL/Python, ja no són necessaris OIDs, Internacionalització de missatges
7.3 27-11-2002 7.3.21 Una versió antiga, sense suport: 07-01-2008 Schema, Internacionalització
7.4 17-11-2003 7.4.30 Una versió antiga, sense suport: 04-10-2010 Optimització all-round
8.0 19-01-2005 8.0.26 Una versió antiga, sense suport: 04-10-2010 Servidor natiu en Microsoft Windows, savepoints, tablespaces, gestió d'excepcions en funcions, point-in-time recovery
8.1 08-11-2005 8.1.23 Una versió antiga, sense suport: 16-12-2010 Millores de rendiment, two-phase commit, particionament de taules, index bitmap scan, shared row locking, roles
8.2 05-12-2006 8.2.23 Una versió antiga, sense suport: 26-09-2011 Millores de rendiment, construcció d'índexs en línia, bloquejos d'advertència, en espera activa
8.3 04-02-2008 8.3.23 Una versió antiga, sense suport: 07-02-2013 Heap-only tuples, cerques de text complet, tipus de dades SQL/XML, ENUM i UUID
8.4 01-07-2009 8.4.21 Una versió antiga, encara amb suport: 20-03-2014 Funcioms de finestres, pàrametres default i variadic per a les funcion, permisos a nivell de columna, restauració de la base de dades amb paral·lelització, col·lació per bases de dades, common table expressions i consultes recursives
9.0 20-09-2010 9.0.17 Una versió antiga, encara amb suport: 20-03-2014 Built-in binary streaming replication, Hot standby, 64-bit Windows, per-column triggers and conditional trigger execution, restriccions exclusives, anonymous code blocks, named parameter, regles per a les contranssenyes
9.1 12-09-2011 9.1.13 Una versió antiga, encara amb suport: 20-03-2014 Replicació síncrona, per-column collations, unlogged tables, k-nearest neighbors (k-NN) indexing, serializable snapshot isolation, writeable common table expressions, integració amb SE-Linux, extensions, SQL/MED attached tables (Foreign Data Wrappers), triggers on views
9.2 10-09-2012 9.2.8 Una versió antiga, encara amb suport: 20-03-2014 Cascading streaming replication, index-only scans, suport natiu JSON, millora en la gestió de bloquejos, tipus range, eina pg_receivexlog, índexs GiST separats amb espais
9.3 09-09-2013 9.3.4 La darrera versió estable: 20-03-2014 Custom background workers, checksums de dades, operadors JSON dedicats, LATERAL JOIN, pg_dump més ràpid, nova eina de monitorització de servidors pg_isready, trigger features, view features, taules forànies que es poden escriure, materialized views, millores en la replicació
Llegenda:
Versió antiga
Versió antiga, amb suport
Darrera versió
Darrera versió preliminar
Proper llançament

Productes al voltant de PostgreSQL[modifica | modifica el codi]

El PGDG solament desenvolupa el Motor de Dades i un nombre petit d'utilitats, per potenciar el treball amb PostgreSQL sol ser necessari afegir utilitats externes creades especialment per a aquest motor, algunes d'aquestes eines són:

Alternatives Comercials[modifica | modifica el codi]

Gràcies a la seva llicència BSD, es permet la utilització del codi per ser comercialitzat. Un dels casos exemple és la d'Enterprise DB (Postgresql Plus), la qual inclou diversos agregats i una interfície de desenvolupament basada en Java. Entre les empreses que comercialitzen productes derivats del PostgreSQL, es troba CyberTech (Alemanya), amb el seu producte CyberCluster.

GIS[modifica | modifica el codi]

PostGIS
Extensió que afegeix suport d'objectes geogràfics a PostgreSQL i permet realitzar anàlisis mitjançant consultes SQL espacials o mitjançant connexió a aplicacions GIS (Sistemes d'Informació Geogràfica).

Replicació[modifica | modifica el codi]

PgCluster
Replicació multi mestre.
Slony-I
Replicació mestre esclau.
PyReplica
Replicació mestre esclau i multi mestre asincrónica.

Eines d'administració[modifica | modifica el codi]

PgAdmin3
Entorn visual d'administració de la base de dades.
PgAccess
Entorn visual d'administració de la base de dades.
PhpPgAdmin
Ajust web.
psql
Client de consola.
Database Master
Entorn d'escriptori visual.

Recerca de text[modifica | modifica el codi]

Full text search
Inclòs en el nucli a partir de la versió 8.3.
Via Tsearch2 i OpenFTS per a versions anteriors a la 8.3.

XML[modifica | modifica el codi]

Suport de XML/XSLT
Via XPath extensions en la secció contrib. Afegit al nucli a la versió 8.3 (com a mínim).

Usuaris destacats[modifica | modifica el codi]

Premis[modifica | modifica el codi]

PostgreSQL ha rebut els següents reconeixements:[3]

  • 1999 LinuxWorld Editor's Choice Award for Best

Database * 2000 Linux Journal Editors' Choice Awards for Best Database * 2002 Linux New Mitjana Editors Choice Award for Best Database * 2003 Linux Journal Editors' Choice Awards for Best Database * 2004 Linux New Mitjana Award For Best Database * 2004 Linux Journal Editors' Choice Awards for Best Database * 2004 ArsTechnica Best Server Application Award

  • 2005 Linux Journal Editors' Choice Awards for Best

Database * 2006 Linux Journal Editors' Choice Awards for Best Database * 2008 Developer.com Product of the Year, Database Tool

Referències[modifica | modifica el codi]

Enllaços externs[modifica | modifica el codi]

A Wikimedia Commons hi ha contingut multimèdia relatiu a: PostgreSQL Modifica l'enllaç a Wikidata