PostgreSQL

De la Viquipèdia, l'enciclopèdia lliure
PostgreSQL
Modifica el valor a Wikidata
Modifica el valor a Wikidata
TipusSGBD
Basat enPOSTGRES Modifica el valor a Wikidata
Versió inicial8 de juliol de 1996 [1]
Versió estable
16.2 (8 febrer 2024) Modifica el valor a Wikidata
Versió prèvia
16 release candidate 1 (31 agost 2023) Modifica el valor a Wikidata


LlicènciaPostgreSQL License Modifica el valor a Wikidata
Característiques tècniques
Sistema operatiuFreeBSD, OpenBSD, Linux, macOS, Solaris, Microsoft Windows i Unix-like Modifica el valor a Wikidata
Escrit enC Modifica el valor a Wikidata
Equip
Creador/sMichael Stonebraker Modifica el valor a Wikidata
Desenvolupador(s)PostgreSQL Global Development Group (en) Tradueix, Peter Eisentraut (en) Tradueix, Tom Lane, Bruce Momjian (en) Tradueix i Marc Fournier (en) Tradueix Modifica el valor a Wikidata
Més informació
Lloc webpostgresql.org (anglès) Modifica el valor a Wikidata
Stack ExchangeEtiqueta Modifica el valor a Wikidata
Free Software DirectoryPostgreSQL Modifica el valor a Wikidata
Id. SubredditPostgreSQL Modifica el valor a Wikidata
Id. Framalibrepostgresql Modifica el valor a Wikidata

PostgreSQL és un programari lliure que implementa un sistema de gestió de bases de dades relacional, distribuït amb la llicència PostgreSQL License.[2]

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.

PostgreSQL no té un sistema de seguiment d'errors, el que fa bastant difícil saber l'estat dels errors.[3]

Nom del producte[modifica]

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 (en anglès) /ˈpoʊstɡrɛs ˌkjuː ˈɛl/, és a dir, Postgres cu ela. É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]

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 de 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 el 8 de juliol de 1996.[1] La primera versió formal de PostgreSQL (6.0) va ser publicada el 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 Red 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 Red 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.

El gener de 2005, PostgreSQL va rebre suport del proveïdor de base de dades Pervasive Software, conegut pel seu producte Btrieve que es feia servir 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.

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]

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

Alta concurrència[modifica]

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]

PostgreSQL suporta nadiuament:

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]

  • Claus foranes també denominades Claus alienes (foreign keys).
  • Disparadors (triggers): Un disparador o trigger es defineix com 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]

Blocs de codi que s'executen en el servidor. Poden ser escrits en diversos llenguatges, amb la potència que cadascun d'ells dona, 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).

Historial de versions[modifica]

Versió Primera publicació Darrera versió Darrera publicació Novetats
Una versió antiga, sense suport: 0.01 01-05-1995 0.03 21-07-1995 Primera publicació com Postgres95
Una versió antiga, sense suport: 1.0 05-09-1995 1.09 04-11-1996 Es canvia el copyright cap a una llicéncia més oberta
Una versió antiga, sense suport: 6.0 29-01-1997 Canvi de nom de Postgres95 a PostgreSQL, índexs unique, utilitat pg_dumpall, autenticació ident.
Una versió antiga, sense suport: 6.1 08-06-1997 6.1.1 22-07-1997 Índexs Multi-columna, seqüències, tipus de dada money, GEQO (GEnetic Query Optimizer).
Una versió antiga, sense suport: 6.2 02-10-1997 6.2.1 17-10-1997 interfície JDBC, triggers, interfície de programació de servidors, restriccions.
Una versió antiga, sense suport: 6.3 01-03-1998 6.3.2 07-04-1998 compatibilitat subselect de SQL92, PL/pgTCL
Una versió antiga, sense suport: 6.4 30-10-1998 6.4.2 20-12-1998 VIEW i RULE, PL/pgSQL
Una versió antiga, sense suport: 6.5 09-06-1999 6.5.3 13-10-1999 MVCC, taules temporals, suport a més sentències d'SQL (CASE, INTERSECT i EXCEPT)
Una versió antiga, sense suport: 7.0 08-05-2000 7.0.3 11-11-2000 Claus foranes, sintaxi SQL92 per als joins
Una versió antiga, sense suport: 7.1 13-04-2001 7.1.3 15-08-2001 Write-ahead log, Outer joins
Una versió antiga, sense suport: 7.2 04-02-2002 7.2.8 09-05-2005 PL/Python, ja no són necessaris OIDs, Internacionalització de missatges
Una versió antiga, sense suport: 7.3 27-11-2002 7.3.21 07-01-2008 Schema, Internacionalització
Una versió antiga, sense suport: 7.4 17-11-2003 7.4.30 04-10-2010 Optimització all-round
Una versió antiga, sense suport: 8.0 19-01-2005 8.0.26 04-10-2010 Servidor natiu en Microsoft Windows, savepoints, tablespaces, gestió d'excepcions en funcions, point-in-time recovery
Una versió antiga, sense suport: 8.1 08-11-2005 8.1.23 16-12-2010 Millores de rendiment, two-phase commit, particionament de taules, index bitmap scan, shared row locking, roles
Una versió antiga, sense suport: 8.2 05-12-2006 8.2.23 26-09-2011 Millores de rendiment, construcció d'índexs en línia, bloquejos d'advertència, en espera activa
Una versió antiga, sense suport: 8.3 04-02-2008 8.3.23 07-02-2013 Heap-only tuples, cerques de text complet, tipus de dades SQL/XML, ENUM i UUID
Una versió antiga, sense suport: 8.4 01-07-2009 8.4.21 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
Una versió antiga, sense suport: 9.0 20-09-2010 9.0.17 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
Una versió antiga, sense suport: 9.1 12-09-2011 9.1.13 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
Una versió antiga, sense suport: 9.2 10-09-2012 9.2.8 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
Una versió antiga, sense suport: 9.3 09-09-2013 9.3.4 20-03-2014 Custom background workers, checksums de dades, operadors JSON dedicats, LATERAL JOIN, pg_dump més ràpid, nova eina de monitoratge de servidors pg_isready, trigger features, view features, taules foranes que es poden escriure, materialized views, millores en la replicació
Una versió antiga, encara amb suport: 9.4 18-12-2014 9.4.7 31-03-2016 JSONB data type, ALTER SYSTEM statement for changing config values, refresh materialized views without blocking reads, dynamic registration/start/stop of background worker processes, Logical Decoding API, GiN index improvements, Linux huge page support, database cache reloading via pg_prewarm
Una versió antiga, encara amb suport: 9.5 07-01-2016 9.5.3 12-05-2016 UPSERT, row level security, JSONB-modifying operators/functions, IMPORT FOREIGN SCHEMA, TABLESAMPLE, CUBE/ROLLUP, grouping sets, foreign table inheritance, pg_rewind tool, index-only scans for GiST indexes and new BRIN (Block Range Indexes) index to speed up queries on very large tables[4]
Una versió antiga, encara amb suport: 9.6 29-09-2016 9.6.14 20-06-2019 Suport consultes paral·leles, millores en la gestió de l'ordenació i relació de taules a través de PostgreSQL foreign data wrapper (FDW), múltiples rèpliques síncrones, vacuum més ràpid en taules grans
Una versió antiga, encara amb suport: 10 05-10-2017 10.9 20-06-2019 Replicació lògica, particionat declaratiu de taules, millores en les consultes paral·leles
La darrera versió estable: 11 18-10-2018 11.4 20-06-2019 Augmenta l'estabilitat i rendiment del particionat, suport de transaccions en els procediments emmagatzemats, millores en les consultes paral·leles, compilació d'expressions just-in-time (JIT)
Llegenda:
Versió antiga
Versió antiga, amb suport
Darrera versió
Darrera versió preliminar
Proper llançament

Productes al voltant de PostgreSQL[modifica]

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]

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]

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]

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

Eines d'administració[modifica]

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]

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

XML[modifica]

Suport de XML/XSLT
Via XPath extensions en la secció contrib Arxivat 2007-05-28 a Wayback Machine.. Afegit al nucli a la versió 8.3 (com a mínim).

Usuaris destacats[modifica]

Premis[modifica]

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

  • 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]

  1. 1,0 1,1 «Happy Birthday, PostgreSQL!». PostgreSQL Global Development Group, 08-07-2008. [Consulta: 9 abril 2016].
  2. «License» (en anglès). Postgresql.org. [Consulta: 9 abril 2016].
  3. A bug tracker for PostgreSQL?
  4. «BRIN: Block Range Indexes», 07-11-2014. [Consulta: 9 novembre 2014].
  5. PostgreSQL affiliates.ORG domain
  6. Sony Online opts for open-source database over Oracle
  7. «PostgreSQL, Award Winning Programari». postgresql.org, 19-01-2008. Arxivat de l'original el 2018-02-12. [Consulta: 31 gener 2008].

Enllaços externs[modifica]

A Wikimedia Commons hi ha contingut multimèdia relatiu a: PostgreSQL