Postgresql

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 .

Soporte de estándares, características, características

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:

Historia

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.

Historial de versiones
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 Versión antigua, no compatible: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 Versión antigua, no compatible:6.2.1 1997-10-17 n / A Interfaz JDBC , disparadores , interfaz de programación del servidor, restricciones .
6.3 1998-03-01 Versión antigua, no compatible:6.3.2 1998-04-07 2003-03-01 Subseleccione el soporte de SQL-92 , PL/pgTCL.
6.4 1998-10-30 Versión antigua, no compatible: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 Versión antigua, no compatible: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 Versión antigua, no compatible:7.0.3 2000-11-11 2004-05-08 Inclusión externa, sintaxis SQL-92 para uniones (JOIN).
7.1 2001-04-13 Versión antigua, no compatible:7.1.3 2001-08-15 2006-04-13 Registro proactivo , OUTER JOIN.
7.2 2002-02-04 Versión antigua, no compatible: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 Versión antigua, no compatible:7.3.21 2008-01-07 2007-11-27 esquemas , funciones de tabla, consultas preparadas [12] .
7.4 2003-11-17 Versión antigua, no compatible:7.4.30 2010-10-04 2010-10-01 Optimización en JOINs y funciones de data warehouse [13] .
8.0 2005-01-19 Versión antigua, no compatible: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 Versión antigua, no compatible: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 Versión antigua, no compatible: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 Versión antigua, no compatible: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 Versión antigua, no compatible: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 Versión antigua, no compatible: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 Versión antigua, no compatible: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] Versión antigua, no compatible: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 Versión antigua, no compatible: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 Versión antigua, no compatible: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 Versión antigua, no compatible: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 Versión antigua, no compatible: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 Versión antigua compatible: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 Versión antigua compatible: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 Versión antigua compatible: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 Versión antigua compatible: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 Versión actual: 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] .

Características clave

Funciones

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.

Disparadores

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.

Reglas y representaciones

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.

Índices

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:

Multiversiones ( MVCC )

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.

Tipos de datos

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 .

Objetos personalizados

PostgreSQL puede ser ampliado por el usuario para sus propias necesidades en casi cualquier aspecto. Es posible agregar el suyo propio:

Herencia y partición

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.

Otras características

Calidad del código fuente

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.

Derivados

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:

PostgresSQL

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

Notas

  1. https://www.postgresql.org/docs/current/history.html
  2. Lanzamiento de PostgreSQL 15
  3. https://github.com/postgres/postgres
  4. El proyecto de código abierto de postgres en Open Hub: página de idiomas - 2006.
  5. 1 2 3 4 5 6 https://www.postgresql.org/download/
  6. Según las preguntas frecuentes archivadas el 15 de octubre de 2011 en Wayback Machine , así como según la grabación de audio archivada el 17 de septiembre de 2009 en Wayback Machine de la pronunciación de referencia, hay una pronunciación "Postgre-S-Q-El" , que no es del todo consistente con la historia del nombre (no hay una palabra separada "Postgre", y la partícula "-gres" se encuentra en los nombres de muchos DBMS relacionales).
  7. "Apéndice D. Conformidad con SQL" Archivado el 23 de marzo de 2014 en Wayback Machine . Documentación de PostgreSQL 9 archivada el 8 de julio de 2014 en Wayback Machine . Grupo de desarrollo global de PostgreSQL. 2009 [1996]. Consultado el 01-04-2013.
  8. "Conformidad con SQL" Archivado el 21 de julio de 2014 en Wayback Machine . postgresql.org. 2013-04-04. Consultado el 28 de agosto de 2013.
  9. Límites de PostgreSQL . www.postgresql.org. Consultado el 15 de agosto de 2016. Archivado desde el original el 12 de noviembre de 2019.
  10. PostgreSQL: Documentación: 11: Lenguajes de procedimiento . www.postgresql.org. Consultado el 2 de marzo de 2019. Archivado desde el original el 3 de marzo de 2019.
  11. Política de versiones . Grupo de desarrollo global de PostgreSQL. Consultado el 4 de octubre de 2018. Archivado desde el original el 4 de abril de 2022.
  12. Vaas, Lisa (2 de diciembre de 2002). "Bases de datos de empresas de destino" . Semana electrónica . Consultado el 29 de octubre de 2016 .
  13. Krill, Paul (20 de noviembre de 2003). PostgreSQL impulsa la base de datos de código abierto . infomundo . Archivado desde el original el 6 de noviembre de 2018 . Consultado el 21 de octubre de 2016 . Parámetro obsoleto utilizado |deadlink=( ayuda )
  14. Krill, Paul (19 de enero de 2005). "La base de datos de código abierto de PostgreSQL cuenta con el impulso de Windows" . infomundo . Archivado desde el original el 6 de noviembre de 2018 . Consultado el 2 de noviembre de 2016 . Parámetro obsoleto utilizado |deadlink=( ayuda )
  15. Weiss, Todd R. (5 de diciembre de 2006). “Lanzamiento de la versión 8.2 de la base de datos PostgreSQL de código abierto” . mundo de la computadora Consultado el 17 de octubre de 2016 .
  16. Gilbertson, Scott (5 de febrero de 2008). “PostgreSQL 8.3: la base de datos de código abierto promete una velocidad increíble” . cableado _ Archivado desde el original el 16 de marzo de 2017 . Consultado el 17 de octubre de 2016 . Parámetro obsoleto utilizado |deadlink=( ayuda )
  17. Huber, Mathias (2 de julio de 2009). “PostgreSQL 8.4 demuestra tener muchas características” . Revista Linux . Archivado desde el original el 9 de junio de 2020 . Consultado el 17 de octubre de 2016 . Parámetro obsoleto utilizado |deadlink=( ayuda )
  18. Brockmeier, Joe Cinco funciones empresariales en PostgreSQL 9 . linux.com . Fundación Linux (30 de septiembre de 2010). Fecha de acceso: 6 de febrero de 2017. Archivado desde el original el 18 de febrero de 2021.
  19. Timothy Prickett Morgan (12 de septiembre de 2011). "PostgreSQL se actualiza a 9.1, apunta a la empresa" . el registro Archivado desde el original el 6 de noviembre de 2018 . Consultado el 6 de febrero de 2017 . Parámetro obsoleto utilizado |deadlink=( ayuda )
  20. PostgreSQL: publicación de PostgreSQL 9.2 . www.postgresql.org (10 de septiembre de 2012). Consultado el 5 de abril de 2022. Archivado desde el original el 21 de septiembre de 2020.
  21. Reintroducción de Hstore para PostgreSQL . InfoQ . Consultado el 5 de abril de 2022. Archivado desde el original el 16 de junio de 2021.
  22. Richard, Chirgwin (7 de enero de 2016). "Di ups, UPSERT your head: PostgreSQL versión 9.5 ha aterrizado" . el registro Archivado desde el original el 24 de mayo de 2020 . Consultado el 17 de octubre de 2016 . Parámetro obsoleto utilizado |deadlink=( ayuda )
  23. PostgreSQL: Documentación: 10: Capítulo 31. Replicación lógica . www.postgresql.org (12 de agosto de 2021). Consultado el 5 de abril de 2022. Archivado desde el original el 5 de abril de 2022.
  24. Lanzamiento de PostgreSQL 11 (18 de octubre de 2018). Consultado el 18 de octubre de 2018. Archivado desde el original el 14 de septiembre de 2020.
  25. Notas de la versión de PostgreSQL . Consultado el 18 de octubre de 2018. Archivado desde el original el 26 de octubre de 2018.
  26. PostgreSQL: ¡Lanzamiento de PostgreSQL 12!  (3 de octubre de 2019). Archivado desde el original el 24 de septiembre de 2020. Consultado el 5 de abril de 2022.
  27. Notas de la versión de PostgreSQL 13 . www.postgresql.org (12 de agosto de 2021). Consultado el 5 de abril de 2022. Archivado desde el original el 5 de abril de 2022.
  28. ¡Lanzamiento de PostgreSQL 13! . www.postgresql.org (24 de septiembre de 2020). Consultado el 5 de abril de 2022. Archivado desde el original el 31 de marzo de 2022.
  29. Notas de la versión de PostgreSQL 14 . www.postgresql.org (11 de noviembre de 2021). Consultado el 5 de abril de 2022. Archivado desde el original el 25 de marzo de 2022.
  30. ¡Lanzamiento de PostgreSQL 14! . www.postgresql.org (30 de septiembre de 2021). Consultado el 5 de abril de 2022. Archivado desde el original el 31 de marzo de 2022.
  31. PostgreSQL logra la certificación de calidad de Coverity  (inglés)  (enlace no disponible) . Grupo de desarrollo global de PostgreSQL (24 de julio de 2005). — Noticias sobre los resultados de la certificación de calidad. Consultado el 8 de septiembre de 2009. Archivado desde el original el 24 de agosto de 2011.
  32. Bases de datos derivadas de PostgreSQL . Wiki de PostgreSQL. Consultado el 30 de julio de 2018. Archivado desde el original el 30 de julio de 2018.
  33. Enfoque para migrar bases de datos de Oracle a EnterpriseDB (enlace descendente) . Oficina Solomatin (13 de diciembre de 2010). — Aproximación a la migración de base de datos de Oracle a EnterpriseDB. Consultado el 13 de diciembre de 2010. Archivado desde el original el 24 de agosto de 2011.    (enlace descendente desde el 03-07-2017 [2063 días])
  34. 2ndQPostgres . Fecha de acceso: 8 de noviembre de 2019. Archivado desde el original el 8 de noviembre de 2019.
  35. Fujitsu Enterprise Postgres . Fecha de acceso: 8 de noviembre de 2019. Archivado desde el original el 8 de noviembre de 2019.
  36. PostgresSQL . Consultado el 8 de noviembre de 2019. Archivado desde el original el 6 de septiembre de 2019.
  37. Konstantin Skurat (15/11/2021). "SUBDsidia en crecimiento" . Comnoticias . Archivado desde el original el 30 de enero de 2022 . Consultado el 30 de enero de 2022 . Parámetro obsoleto utilizado |deadlink=( ayuda );Consulta la fecha en |date=( ayuda en español )
  38. Alexander Malyarevsky (27 de julio de 2021). “Virtualización: tendencias dentro de una tendencia en el mercado ruso” . CRN . Archivado desde el original el 30 de enero de 2022 . Consultado el 30 de enero de 2022 . Parámetro obsoleto utilizado |deadlink=( ayuda );Consulta la fecha en |date=( ayuda en español )
  39. Denis Voeikov (10 de diciembre de 2020). “Rosatom está cambiando masivamente Oracle y Microsoft DBMS al Russian Postgres Pro” . Cnoticias . Archivado desde el original el 30 de enero de 2022 . Consultado el 30 de enero de 2022 . Parámetro obsoleto utilizado |deadlink=( ayuda )
  40. Denis Voeikov (4 de enero de 2021). “Goznak se está cambiando al DBMS Postgres Pro ruso” . Cnoticias . Archivado desde el original el 30 de enero de 2022 . Consultado el 30 de enero de 2022 . Parámetro obsoleto utilizado |deadlink=( ayuda );Consulta la fecha en |date=( ayuda en español )
  41. Vladislav Meshcheryakov (28 de enero de 2015). “El fundador de NVision invirtió en el equipo de desarrollo ruso de PostgreSQL” . Cnoticias . Archivado desde el original el 30 de enero de 2022 . Consultado el 30 de enero de 2022 . Parámetro obsoleto utilizado |deadlink=( ayuda )

Enlaces