postgresql | |
---|---|
Tipo de | DBMS relacional , software libre y de código abierto y servidor SQL [d] |
Autor | Michael Rompepiedras [1] |
Desarrollador | Comunidad PostgreSQL |
Escrito en | C [3] [4] |
Sistema operativo | FreeBSD [5] , OpenBSD [5] , Linux [5] , macOS [5] , Solaris [5] , Microsoft Windows [5] y sistema operativo similar a Unix |
Primera edición | 1996 |
ultima versión |
|
Licencia | Licencia PostgreSQL ( gratis y de código abierto ) |
Sitio web | postgresql.org _ |
Archivos multimedia en Wikimedia Commons |
PostgreSQL (pronunciado "Post-Gres-Q-El" [6] ) es un sistema gratuito de administración de bases de datos relacionales de objetos (DBMS).
Existe en implementaciones para una variedad de plataformas similares a UNIX , incluidos AIX , varios sistemas BSD , HP-UX , IRIX , Linux , macOS , Solaris / OpenSolaris , Tru64 , QNX y para Microsoft Windows .
PostgreSQL se basa en el lenguaje SQL y es compatible con muchas de las funciones del estándar SQL:2011 [7] [8] .
PostgreSQL versión 12 tiene las siguientes restricciones [9] :
Tamaño máximo de la base de datos | Sin restricciones |
Tamaño máximo de la tabla | 32TB _ |
Tamaño máximo de campo | 1GB _ |
Registros máximos por tabla | Limitado por el tamaño de la mesa |
Máximo de campos en un registro | 250-1600, dependiendo del tipo de campo |
Índices máximos por tabla | Sin restricciones |
Los puntos fuertes de PostgreSQL son:
PostgreSQL se basa en la base de datos Postgres no comercial desarrollada como un proyecto de código abierto en la Universidad de California, Berkeley . El desarrollo de Postgres, que comenzó en 1986, estuvo directamente relacionado con Michael Stonebreaker , responsable del anterior proyecto Ingres , en ese momento ya adquirido por Computer Associates . El nombre significaba " Post Ingres " , y muchos de los primeros desarrollos se aplicaron en la creación de Postgres.
Stonebreaker y sus alumnos desarrollaron el nuevo DBMS durante ocho años, de 1986 a 1994. Durante este período, se introdujeron en la sintaxis procedimientos, reglas, tipos definidos por el usuario y otros componentes. En 1995, el desarrollo se dividió nuevamente: Stonebreaker usó su experiencia para construir la base de datos comercial Illustra , promovida por su propia empresa del mismo nombre (luego adquirida por Informix ), y sus alumnos desarrollaron una nueva versión de Postgres, Postgres95, en la que POSTQUEL El lenguaje de consulta , un legado de Ingres, se reemplazó por SQL.
El desarrollo de Postgres95 se llevó fuera de la universidad y se entregó a un equipo de entusiastas. El nuevo DBMS recibió el nombre con el que se le conoce y actualmente se encuentra en desarrollo - PostgreSQL.
Versión | Primera fecha de lanzamiento | última versión menor | última fecha de lanzamiento | Fin del soporte [11] | Características implementadas |
---|---|---|---|---|---|
6.0 | 1997-01-29 | n / A | n / A | n / A | Formalmente la primera versión de PostgreSQL. Índices únicos, utilidad pg_dumpall, autenticación de identidad . |
6.1 | 1997-06-08 | 6.1.1 | 1997-07-22 | n / A | Índices de varias columnas, secuencias, tipo de datos monetarios, GEQO (GEnetic Query Optimizer). |
6.2 | 1997-10-02 | 6.2.1 | 1997-10-17 | n / A | Interfaz JDBC , disparadores , interfaz de programación del servidor, restricciones . |
6.3 | 1998-03-01 | 6.3.2 | 1998-04-07 | 2003-03-01 | Subseleccione el soporte de SQL-92 , PL/pgTCL. |
6.4 | 1998-10-30 | 6.4.2 | 1998-12-20 | 2003-10-30 | Soporte para VIEW (solo en modo de solo lectura) y reglas, PL/pgSQL . |
6.5 | 1999-06-09 | 6.5.3 | 1999-10-13 | 2004-06-09 | MVCC , tablas temporales, soporte para nuevas sentencias SQL (CASE, INTERSECT y EXCEPT). |
7.0 | 2000-05-08 | 7.0.3 | 2000-11-11 | 2004-05-08 | Inclusión externa, sintaxis SQL-92 para uniones (JOIN). |
7.1 | 2001-04-13 | 7.1.3 | 2001-08-15 | 2006-04-13 | Registro proactivo , OUTER JOIN. |
7.2 | 2002-02-04 | 7.2.8 | 2005-05-09 | 2007-02-04 | PL/Python, el campo OID se vuelve opcional en tablas, internacionalización y localización de mensajes . |
7.3 | 2002-11-27 | 7.3.21 | 2008-01-07 | 2007-11-27 | esquemas , funciones de tabla, consultas preparadas [12] . |
7.4 | 2003-11-17 | 7.4.30 | 2010-10-04 | 2010-10-01 | Optimización en JOINs y funciones de data warehouse [13] . |
8.0 | 2005-01-19 | 8.0.26 | 2010-10-04 | 2010-10-01 | Versión para Microsoft Windows , puntos de guardado en transacciones , tablespaces , recuperación de un punto en el tiempo [14] . |
8.1 | 2005-11-08 | 8.1.23 | 2010-12-16 | 2010-11-08 | Optimizaciones de rendimiento, compromiso en dos fases, particionamiento de tablas , escaneo de mapa de bits de índice en el planificador SQL, bloqueo de nivel de fila compartido, roles. |
8.2 | 2006-12-05 | 8.2.23 | 2011-12-05 | 2011-12-05 | Optimización del rendimiento, creación continua de índices, bloqueos de avisos, modo de "espera en caliente" al restaurar la base de datos a partir de registros WAL [15] . |
8.3 | 2008-02-04 | 8.3.23 | 2013-02-07 | 2013-02-07 | Mecanismo de tuplas de solo almacenamiento dinámico, búsqueda de texto completo , [16] SQL/XML , tipos ENUM, tipos UUID . |
8.4 | 2009-07-01 | 8.4.22 | 2014-07-24 | 2014-07-24 | Funciones de ventana, permisos a nivel de campos (columnas) de la tabla, recuperación de bases de datos paralelas, reglas de clasificación a nivel de bases de datos, consultas de tablas comunes y consultas recursivas [17] . |
9.0 | 2010-09-20 | 9.0.23 | 2015-10-08 | 2015-10-08 | Replicación binaria de transmisión incorporada , modo de espera activo , actualización sin detener el servidor, compatibilidad con versiones de Windows de 64 bits [18] . |
9.1 | 2011-09-12 | 9.1.24 | 2016-10-27 | 2016-10-27 | Replicación síncrona, clasificación por columna, tablas no registradas, nivel de aislamiento de transacciones de "aislamiento de instantáneas serializable", capacidad de escritura en consultas de tablas SQL comunes, integración de SELinux , extensiones, tablas externas [19] . |
9.2 | 2012-09-10 [20] | 9.2.24 | 2017-11-09 | 2017-11-09 | Replicación de transmisión en cascada, escaneos de solo índice, compatibilidad directa con JSON , administración de bloqueos mejorada, tipos de rango, utilidad pg_receivexlog, índices GiST particionados por espacio . |
9.3 | 2013-09-09 | 9.3.25 | 2018-11-08 | 2018-11-08 | Flujos de trabajo en segundo plano configurables, sumas de verificación de página para detectar datos corruptos, declaraciones JSON, LATERAL JOIN, pg_dump speedup, nueva utilidad de monitoreo de servidor pg_isready, capacidades mejoradas de vista base y disparador, tablas externas grabables, vistas materializadas , mejoras en la replicación. |
9.4 | 2014-12-18 | 9.4.26 | 2020-02-13 | 2020-02-13 | Tipo de datos JSONB , instrucción ALTER SYSTEM para cambiar valores en la configuración del sistema, capacidad para actualizar vistas materializadas sin bloqueo de lectura, registro/inicio/detención dinámicos de procesos de trabajo en segundo plano, API de decodificación lógica para conexión a base de datos, índices GIN mejorados , soporte para enormes pages para Linux, recargando la caché de la base de datos usando pg_prewarm, una nueva versión acelerada de Hstore posicionada como la forma preferida de almacenar datos de columna [21] . |
9.5 | 2016-01-07 | 9.5.25 | 2021-02-11 | 2021-02-11 | UPSERT, políticas de protección de filas, TABLESAMPLE, CUBE/ROLLUP, GROUPING SETS y el nuevo tipo de índice BRIN [22] . |
9.6 | 2016-09-29 | 9.6.24 | 2021-11-11 | 2021-11-11 | Compatibilidad con consultas en paralelo, mejoras en el manejo de datos externos (FDW) de PostgreSQL: opción pushdown agregada para ordenar/unir, varios servidores en espera en caliente síncronos, operación de vacío más rápida en tablas grandes. |
diez | 2017-10-05 | 10.20 | 2022-02-10 | 2022-11-10 | Replicación lógica, [23] particionamiento declarativo de tablas, ejecución paralela mejorada en consultas. |
once | 2018-10-18 | 11.15 | 2022-02-10 | 2023-11-09 | Estabilidad y rendimiento de partición mejorados, soporte para transacciones en procedimientos almacenados, ejecución paralela mejorada en consultas, compilación de expresiones justo a tiempo (JIT) [24] [25] . |
12 | 2019-10-03 | 12.10 | 2022-02-10 | 2024-11-14 | Consultas más rápidas y uso más económico del espacio en disco; soporte para expresiones de lenguaje de rutas SQL/JSON; columnas generadas; mejoras en internacionalización y autenticación; una nueva interfaz para crear motores de hojas de cálculo conectables [26] . |
13 | 2020-09-24 | 13.6 | 2022-02-10 | 2025-11-13 | La deduplicación de nodos en índices B-tree es más rápida y requiere menos espacio, mayor rendimiento de consultas que usan agregados o tablas particionadas, mejor programación de consultas cuando se usan estadísticas extendidas, limpieza paralela de índices, clasificación incremental [27] [28] . |
catorce | 2021-09-30 | 14.2 | 2022-02-10 | 2026-11-12 | Las opciones SEARCH y CYCLE definidas por SQL están permitidas en consultas generales de tablas , y se permite agregar DISTINCT a GROUP BY [29] [30] . |
Las funciones son bloques de código que se ejecutan en el servidor, no en el cliente de la base de datos. Aunque se pueden escribir en SQL puro, la implementación de lógica adicional, como condicionales y bucles , está fuera del alcance de SQL y requiere el uso de algunas extensiones de lenguaje. Las funciones se pueden escribir utilizando uno de los siguientes lenguajes:
PostgreSQL permite el uso de funciones que devuelven un conjunto de registros, que luego se pueden usar de la misma manera que el resultado de una consulta normal.
Las funciones se pueden ejecutar tanto con los derechos de su creador como con los derechos del usuario actual.
A veces las funciones se identifican con procedimientos almacenados , pero hay una diferencia entre estos conceptos. Desde la novena versión, es posible escribir bloques autónomos que permiten ejecutar código en lenguajes procedimentales sin escribir funciones, directamente en el cliente.
Los disparadores se definen como funciones iniciadas por operaciones DML . Por ejemplo, una operación INSERTAR puede activar un disparador que verifica el registro agregado contra ciertas condiciones. Al escribir funciones para disparadores, se pueden usar varios lenguajes de programación (ver arriba).
Los disparadores están asociados con las tablas. Los disparadores múltiples se ejecutan en orden alfabético.
El motor de reglas ( eng. rules ) es un mecanismo para crear controladores personalizados no solo para operaciones DML , sino también para operaciones de selección. La principal diferencia con el mecanismo de activación es que las reglas se activan en la etapa de análisis de la solicitud, antes de elegir el plan de ejecución óptimo y el proceso de ejecución en sí. Las reglas le permiten anular el comportamiento del sistema al realizar una operación SQL en una tabla. Un buen ejemplo es la implementación del mecanismo de vistas ( ing. vistas ): cuando se crea una vista, se crea una regla que especifica que, en lugar de realizar una operación de recuperación en la vista, el sistema debe realizar una operación de recuperación en la tabla subyacente. /tables, teniendo en cuenta las condiciones de recuperación subyacentes a la definición de la vista. Para crear vistas que admitan operaciones de actualización, el usuario debe definir las reglas para insertar, actualizar y eliminar filas.
PostgreSQL admite los siguientes tipos de índice : B-tree , hash , GiST , GIN , BRIN , Bloom . Puede crear nuevos tipos de índice según sea necesario. Los índices en PostgreSQL tienen las siguientes propiedades:
PostgreSQL admite la modificación simultánea de la base de datos por parte de varios usuarios utilizando el mecanismo de control de concurrencia multiversión ( MVCC ). Esto cumple con los requisitos de ACID y prácticamente elimina la necesidad de bloqueos de lectura.
PostgreSQL admite un gran conjunto de tipos de datos integrados:
Además, el usuario puede crear de forma independiente los nuevos tipos que necesita y programar mecanismos de indexación para ellos utilizando GiST .
PostgreSQL puede ser ampliado por el usuario para sus propias necesidades en casi cualquier aspecto. Es posible agregar el suyo propio:
Las tablas pueden heredar características y conjuntos de campos de otras tablas (principales). En este caso, los datos agregados a la tabla generada participarán automáticamente (a menos que se especifique por separado) en las consultas a la tabla principal.
PostgreSQL 10 agregó un mecanismo de partición de tablas . El particionamiento está diseñado para dividir una tabla en varias, las llamadas particiones. La partición es similar a la herencia, pero tiene una sintaxis más fácil de usar y restricciones más estrictas, lo que permite optimizaciones adicionales en la planificación de consultas.
De acuerdo con los resultados de un análisis automatizado de errores de varios software, realizado en 2005, se encontraron 20 áreas problemáticas en el código fuente de PostgreSQL por cada 775 000 líneas de código fuente (en promedio, un error por cada 39 000 líneas de código) [31] . A modo de comparación: MySQL : 97 problemas, un error por cada 8000 líneas de código; FreeBSD (completo): 306 problemas, un error por cada 2500 líneas de código; Linux (solo kernel): 950 problemas, un error por cada 800 líneas de código.
La licencia de PostgreSQL le permite crear varias bifurcaciones , incluso comerciales, basadas en él . Hay varias docenas conocidas [32] .
Basado en PostgreSQL, EnterpriseDB ha desarrollado otras variantes de este DBMS que se pagan para uso comercial: Postgres Plus (consiste completamente en productos de código abierto; el pago solo se requiere si necesita comprar soporte comercial para el producto) y Postgres Plus Advanced Server ( Extensión de PostgreSQL con capacidades especiales para garantizar la compatibilidad con Oracle Database ) [33] . El conjunto de entrega de estos productos contiene un conjunto de software para desarrolladores y administradores de bases de datos:
Existen otros productos comerciales basados en PostgreSQL y que lo complementan con diversas funciones:
La empresa desarrolladora fue fundada en 2015 por 3 desarrolladores líderes rusos ( colaborador principal ) PostgreSQL DBMS: Oleg Bartunov , Fedor Sigaev , Alexander Korotkov, el desarrollador Ivan Panchenko y el cofundador de NVision Group , Anton Sushkevich, quien se convirtió en el inversor del proyecto [41] .
Sistemas de gestión de bases de datos (DBMS) | |
---|---|
Servidor de cliente | |
Motores | |
Servidor de archivos |
Base de datos | |
---|---|
Conceptos | |
Objetos | |
Llaves | |
sql |
|
Componentes |