Postgresql

ImprimirCitar

PostgreSQL (, POHST-gres kyoo el), también conocido como Postgres, es un sistema de administración de bases de datos relacionales (RDBMS) gratuito y de código abierto que enfatiza la extensibilidad y SQL cumplimiento. Originalmente se llamó POSTGRES, en referencia a sus orígenes como sucesora de la base de datos Ingres desarrollada en la Universidad de California, Berkeley. En 1996, se cambió el nombre del proyecto a PostgreSQL para reflejar su compatibilidad con SQL. Después de una revisión en 2007, el equipo de desarrollo decidió mantener el nombre PostgreSQL y el alias Postgres.

PostgreSQL incluye transacciones con propiedades de atomicidad, coherencia, aislamiento y durabilidad (ACID), vistas actualizables automáticamente, vistas materializadas, activadores, claves externas y procedimientos almacenados. Está diseñado para manejar una variedad de cargas de trabajo, desde máquinas individuales hasta almacenes de datos o servicios web con muchos usuarios simultáneos. Es la base de datos predeterminada para macOS Server y también está disponible para Windows, Linux, FreeBSD y OpenBSD.

Historia

PostgreSQL evolucionó a partir del proyecto Ingres de la Universidad de California, Berkeley. En 1982, el líder del equipo de Ingres, Michael Stonebraker, dejó Berkeley para hacer una versión propietaria de Ingres. Regresó a Berkeley en 1985 y comenzó un proyecto posterior a Ingres para abordar los problemas con los sistemas de bases de datos contemporáneos que se habían vuelto cada vez más claros a principios de la década de 1980. Ganó el Premio Turing en 2014 por estos y otros proyectos, y las técnicas fueron pioneras en ellos.

El nuevo proyecto, POSTGRES, tenía como objetivo agregar la menor cantidad de funciones necesarias para admitir completamente los tipos de datos. Estas características incluían la capacidad de definir tipos y describir completamente las relaciones, algo que se usa ampliamente, pero que el usuario mantiene en su totalidad. En POSTGRES, la base de datos entendía las relaciones y podía recuperar información en tablas relacionadas de forma natural usando reglas. POSTGRES usó muchas de las ideas de Ingres, pero no su código.

A partir de 1986, los artículos publicados describieron la base del sistema y se mostró una versión prototipo en la Conferencia ACM SIGMOD de 1988. El equipo lanzó la versión 1 para una pequeña cantidad de usuarios en junio de 1989, seguida de la versión 2 con un sistema de reglas reescrito en junio de 1990. La versión 3, lanzada en 1991, volvió a escribir el sistema de reglas y agregó soporte para múltiples administradores de almacenamiento y un motor de consultas mejorado. En 1993, la cantidad de usuarios comenzó a abrumar al proyecto con solicitudes de soporte y funciones. Después de lanzar la versión 4.2 el 30 de junio de 1994, principalmente una limpieza, el proyecto finalizó. Berkeley lanzó POSTGRES bajo una variante de licencia MIT, que permitió a otros desarrolladores usar el código para cualquier uso. En ese momento, POSTGRES usaba un intérprete de lenguaje de consulta POSTQUEL influenciado por Ingres, que podía usarse de manera interactiva con una aplicación de consola llamada monitor.

En 1994, los estudiantes graduados de Berkeley, Andrew Yu y Jolly Chen, reemplazaron el intérprete de lenguaje de consulta POSTQUEL por uno para el lenguaje de consulta SQL, creando Postgres95. La consola monitor también fue reemplazada por psql. Yu y Chen anunciaron la primera versión (0.01) a los probadores beta el 5 de mayo de 1995. La versión 1.0 de Postgres95 se anunció el 5 de septiembre de 1995, con una licencia más liberal que permitía que el software se pudiera modificar libremente.

El 8 de julio de 1996, Marc Fournier de Hub.org Networking Services proporcionó el primer servidor de desarrollo no universitario para el esfuerzo de desarrollo de código abierto. Con la participación de Bruce Momjian y Vadim B. Mikheev, se comenzó a trabajar para estabilizar el código heredado de Berkeley.

En 1996, se cambió el nombre del proyecto a PostgreSQL para reflejar su compatibilidad con SQL. La presencia en línea en el sitio web PostgreSQL.org comenzó el 22 de octubre de 1996. La primera versión de PostgreSQL formó la versión 6.0 el 29 de enero de 1997. Desde entonces, los desarrolladores y voluntarios de todo el mundo han mantenido el software como The PostgreSQL Global Development Group.

El proyecto continúa ofreciendo versiones bajo su licencia PostgreSQL de software gratuito y de código abierto. El código proviene de contribuciones de proveedores propietarios, empresas de soporte y programadores de código abierto.

Control de concurrencia multiversión (MVCC)

PostgreSQL gestiona la simultaneidad a través del control de simultaneidad multiversión (MVCC), que proporciona a cada transacción una "instantánea" de la base de datos, lo que permite realizar cambios sin afectar otras transacciones. Esto elimina en gran medida la necesidad de bloqueos de lectura y garantiza que la base de datos mantenga los principios ACID. PostgreSQL ofrece tres niveles de aislamiento de transacciones: lectura confirmada, lectura repetible y serializable. Debido a que PostgreSQL es inmune a las lecturas sucias, solicitar un nivel de aislamiento de transacciones de lectura no confirmada proporciona lectura confirmada en su lugar. PostgreSQL admite serialización completa a través del método de aislamiento de instantáneas serializable (SSI).

Almacenamiento y replicación

Replicación

PostgreSQL incluye replicación binaria integrada basada en el envío de cambios (registros de escritura anticipada [WAL]) a nodos replicados de forma asíncrona, con la capacidad de ejecutar consultas de solo lectura en estos nodos replicados. Esto permite dividir el tráfico de lectura entre múltiples nodos de manera eficiente. El software de replicación anterior que permitía una escala de lectura similar normalmente se basaba en agregar disparadores de replicación al maestro, lo que aumentaba la carga.

PostgreSQL incluye replicación síncrona integrada que garantiza que, para cada transacción de escritura, el maestro espere hasta que al menos un nodo de réplica haya escrito los datos en su registro de transacciones. A diferencia de otros sistemas de bases de datos, la durabilidad de una transacción (ya sea asíncrona o síncrona) se puede especificar por base de datos, por usuario, por sesión o incluso por transacción. Esto puede ser útil para las cargas de trabajo que no requieren dichas garantías, y puede que no se desee para todos los datos, ya que ralentiza el rendimiento debido al requisito de que la confirmación de la transacción alcance el modo de espera síncrono.

Los servidores en espera pueden ser síncronos o asíncronos. Los servidores en espera sincrónicos se pueden especificar en la configuración que determina qué servidores son candidatos para la replicación sincrónica. El primero de la lista que esté transmitiendo activamente se usará como el servidor síncrono actual. Cuando esto falla, el sistema pasa al siguiente en la línea.

La replicación multimaestro síncrona no está incluida en el núcleo de PostgreSQL. Postgres-XC, que se basa en PostgreSQL, proporciona replicación multimaestro síncrona y escalable. Tiene la misma licencia que PostgreSQL. Un proyecto relacionado se llama Postgres-XL. Postgres-R es otra bifurcación más. La replicación bidireccional (BDR) es un sistema de replicación multimaestro asíncrono para PostgreSQL.

Herramientas como repmgr facilitan la administración de clústeres de replicación.

Hay varios paquetes de replicación asíncronos basados en activadores disponibles. Estos siguen siendo útiles incluso después de la introducción de las capacidades principales ampliadas, para situaciones en las que la replicación binaria de un clúster de base de datos completo es inapropiada:

  • Slony-I
  • Londiste, parte de SkyTools (desarrollado por Skype)
  • Reproducción multimaster de Bucardo (desarrollada por Backcountry.com)
  • Simétrico DS multi-master, réplica multi-tier

Índices

PostgreSQL incluye soporte integrado para índices de tabla hash y árbol B regulares, y cuatro métodos de acceso a índices: árboles de búsqueda generalizados (GiST), índices invertidos generalizados (GIN), GiST con particiones espaciales (SP-GiST) y Block Índices de Rango (BRIN). Además, se pueden crear métodos de índice definidos por el usuario, aunque este es un proceso bastante complicado. Los índices en PostgreSQL también admiten las siguientes funciones:

  • Los índices de expresión se pueden crear con un índice del resultado de una expresión o función, en lugar de simplemente el valor de una columna.
  • Los índices parciales, que sólo forman parte del índice de una tabla, pueden crearse agregando una cláusula WHERE al final de la declaración CREATE INDEX. Esto permite crear un índice más pequeño.
  • El planificador es capaz de utilizar múltiples índices juntos para satisfacer consultas complejas, utilizando operaciones temporales en el índice de mapas de bits en memoria (útil para aplicaciones de almacén de datos para unir una gran tabla de hechos a tablas de dimensiones más pequeñas como las dispuestas en un esquema estrella).
  • vecinos de k-nearest (k-NN) indexación (también referido a KNN-GiST) proporciona una búsqueda eficiente de "valores más cercanos" a los especificados, útiles para encontrar palabras similares, o cerrar objetos o ubicaciones con datos geoespaciales. Esto se logra sin una combinación exhaustiva de valores.
  • Los escaneos de un solo índice permiten al sistema buscar datos de índices sin tener que acceder a la tabla principal.
  • Índices de rango de bloques (BRIN).

Esquemas

En PostgreSQL, un esquema contiene todos los objetos, excepto los roles y los espacios de tablas. Los esquemas actúan efectivamente como espacios de nombres, permitiendo que los objetos del mismo nombre coexistan en la misma base de datos. De forma predeterminada, las bases de datos recién creadas tienen un esquema llamado público, pero se pueden agregar más esquemas y el esquema público no es obligatorio.

Una configuración search_path determina el orden en que PostgreSQL verifica los esquemas en busca de objetos no calificados (aquellos sin un esquema prefijado). De forma predeterminada, se establece en $user, public ($user se refiere al usuario de la base de datos actualmente conectado). Este valor predeterminado se puede configurar a nivel de base de datos o de rol, pero como es un parámetro de sesión, se puede cambiar libremente (incluso varias veces) durante una sesión de cliente, lo que afecta solo a esa sesión.

Los esquemas inexistentes enumerados en search_path se omiten silenciosamente durante la búsqueda de objetos.

Los nuevos objetos se crean en el esquema válido (uno que existe actualmente) que aparece primero en la ruta de búsqueda.

Tipos de datos

Se admite una amplia variedad de tipos de datos nativos, incluidos:

  • Boolean
  • Arbitrary-precision numerics
  • Personaje (texto, varchar, char)
  • binario
  • Fecha/hora (tiempo/hora con/sin zona horaria, fecha, intervalo)
  • Dinero
  • Enum
  • Cuerdas de bits
  • Tipo de búsqueda de texto
  • Compuesto
  • HStore, una extensión habilitada almacén de valor clave dentro de PostgreSQL
  • Arrays (longitud variable y puede ser de cualquier tipo de datos, incluyendo tipos de texto y compuestos) hasta 1 GB en tamaño total de almacenamiento
  • Primitivos geométricos
  • Dirección IPv4 y IPv6
  • Cierre interdominio sin clases (CIDR) bloques y direcciones MAC
  • Consultas XML compatibles con XPath
  • identificador universalmente único (UUID)
  • JavaScript Notación de objetos (JSON), y un JSONB binario más rápido (no igual que BSON)

Además, los usuarios pueden crear sus propios tipos de datos que, por lo general, se pueden indexar por completo a través de las infraestructuras de indexación de PostgreSQL: GiST, GIN, SP-GiST. Ejemplos de estos incluyen los tipos de datos del sistema de información geográfica (GIS) del proyecto PostGIS para PostgreSQL.

También hay un tipo de datos llamado dominio, que es igual que cualquier otro tipo de datos pero con restricciones opcionales definidas por el creador de ese dominio. Esto significa que cualquier dato ingresado en una columna usando el dominio deberá cumplir con las restricciones que se definieron como parte del dominio.

Se puede utilizar un tipo de datos que represente un rango de datos que se denominan tipos de rango. Estos pueden ser rangos discretos (por ejemplo, todos los valores enteros del 1 al 10) o rangos continuos (por ejemplo, en cualquier momento entre 10:00 am y 11: 00 am). Los tipos de rango incorporados disponibles incluyen rangos de números enteros, números enteros grandes, números decimales, marcas de tiempo (con y sin zona horaria) y fechas.

Se pueden crear tipos de rango personalizados para que estén disponibles nuevos tipos de rangos, como rangos de direcciones IP que usan el tipo inet como base o rangos flotantes que usan el tipo de datos flotante como base. Los tipos de rango admiten límites de rango inclusivos y exclusivos mediante [/< kbd style="background:#EEEEEE; letter-spacing:0.05em; padding-left:0.25em; padding-right:0.2em;">] y (/) caracteres respectivamente. (por ejemplo, [4,9) representa todos los números enteros comenzando desde e incluyendo 4 hasta pero sin incluir 9.) Los tipos de rango también son compatibles con los operadores existentes que se utilizan para verificar la superposición, la contención, el derecho de, etc.

Objetos definidos por el usuario

Se pueden crear nuevos tipos de casi todos los objetos dentro de la base de datos, incluidos:

  • Casts
  • Conversiones
  • Tipos de datos
  • Dominios de datos
  • Funciones, incluidas funciones agregadas y funciones de ventana
  • Índices incluyendo índices personalizados para tipos personalizados
  • Operadores (los existentes pueden sobrecargarse)
  • Idiomas de procedimiento

Herencia

Las tablas se pueden configurar para heredar sus características de una tabla principal. Los datos de las tablas secundarias parecerán existir en las tablas principales, a menos que los datos se seleccionen de la tabla principal utilizando la palabra clave ÚNICA, es decir, SELECCIONAR * DESDE SOLO tabla_principal; . Agregar una columna en la tabla principal hará que esa columna aparezca en la tabla secundaria.

La herencia se puede usar para implementar el particionamiento de tablas, ya sea usando activadores o reglas para dirigir las inserciones a la tabla principal en las tablas secundarias adecuadas.

Esta característica no es totalmente compatible. En particular, las restricciones de tabla no son heredables actualmente. Todas las restricciones de verificación y las restricciones no nulas en una tabla principal las heredan automáticamente sus hijos. Otros tipos de restricciones (restricciones únicas, de clave principal y de clave externa) no se heredan.

La herencia proporciona una forma de mapear las características de las jerarquías de generalización representadas en los diagramas de relación de entidad (ERD) directamente en la base de datos de PostgreSQL.

Otras funciones de almacenamiento

  • Limitaciones de integridad de referencia, incluidas restricciones de clave extranjeras, limitaciones de columna y controles de filas
  • Almacenamiento binario y textual de grandes objetos
  • Cuadros
  • Collation per-column
  • Copia de seguridad en línea
  • Recuperación puntual, implementada usando logging de escritura a cabeza
  • Actualizaciones en el lugar con pg_upgrade para menos tiempo de inactividad

Control y conectividad

Envoltorios de datos extranjeros

PostgreSQL puede vincularse a otros sistemas para recuperar datos a través de contenedores de datos externos (FDW). Estos pueden tomar la forma de cualquier fuente de datos, como un sistema de archivos, otro sistema de administración de bases de datos relacionales (RDBMS) o un servicio web. Esto significa que las consultas regulares de la base de datos pueden usar estas fuentes de datos como tablas regulares e incluso unir varias fuentes de datos.

Interfaces

Para conectarse a aplicaciones, PostgreSQL incluye las interfaces integradas libpq (la interfaz oficial de la aplicación C) y ECPG (un sistema C incorporado). Las bibliotecas de terceros para conectarse a PostgreSQL están disponibles para muchos lenguajes de programación, incluidos C++, Java, Julia, Python, Node.js, Go y Rust.

Lenguajes procesales

Los lenguajes de procedimiento permiten a los desarrolladores ampliar la base de datos con subrutinas (funciones) personalizadas, a menudo denominadas procedimientos almacenados. Estas funciones se pueden usar para crear disparadores de base de datos (funciones invocadas en la modificación de ciertos datos) y tipos de datos personalizados y funciones agregadas. Los lenguajes de procedimiento también se pueden invocar sin definir una función, utilizando un comando DO a nivel de SQL.

Los lenguajes se dividen en dos grupos: Los procedimientos escritos en lenguajes seguros están protegidos y pueden ser creados y utilizados de forma segura por cualquier usuario. Los procedimientos escritos en lenguajes inseguros solo pueden ser creados por superusuarios, ya que permiten eludir las restricciones de seguridad de una base de datos, pero también pueden acceder a fuentes externas a la base de datos. Algunos lenguajes como Perl ofrecen versiones seguras e inseguras.

PostgreSQL tiene soporte integrado para tres lenguajes de procedimiento:

  • Plain SQL (seguro). Las funciones SQL más simples pueden ampliarse en línea en la consulta de llamadas (SQL), que ahorra la llamada de función sobrecabezada y permite al optimizador de consultas "ver dentro" la función.
  • Lenguaje procesal/PostgreSQL (PL/pgSQL) (seguro), que se asemeja al lenguaje procesal de Oracle para SQL (PL/SQL) y SQL/Persistent Stored Modules (SQL/PSM).
  • C (no seguro), que permite cargar una o más biblioteca compartida personalizada en la base de datos. Las funciones escritas en C ofrecen el mejor rendimiento, pero los errores en código pueden chocar y potencialmente corromper la base de datos. La mayoría de las funciones incorporadas están escritas en C.

Además, PostgreSQL permite que los lenguajes de procedimiento se carguen en la base de datos a través de extensiones. Se incluyen tres extensiones de idioma con PostgreSQL para admitir Perl, Tcl y Python. Para Python, se usa el actual Python 3 y el discontinuado Python 2 ya no es compatible a partir de PostgreSQL 15. Ambos eran admitida anteriormente, de forma predeterminada en Python 2, mientras que las versiones anterior y nueva no se podían usar en la misma sesión. Los proyectos externos brindan soporte para muchos otros lenguajes, incluidos PL/Java, JavaScript (PL/V8), PL/Julia PL/R, PL/Ruby y otros.

Disparadores

Los desencadenantes son eventos desencadenados por la acción de las declaraciones del lenguaje de manipulación de datos (DML) de SQL. Por ejemplo, una declaración INSERT podría activar un disparador que verifica si los valores de la declaración son válidos. La mayoría de los disparadores solo se activan mediante instrucciones INSERT o UPDATE.

Los activadores son totalmente compatibles y se pueden adjuntar a las tablas. Los disparadores pueden ser por columna y condicionales, en el sentido de que los disparadores de ACTUALIZACIÓN pueden apuntar a columnas específicas de una tabla, y se les puede indicar que se ejecuten bajo un conjunto de condiciones como se especifica en la cláusula WHERE del disparador. Los activadores se pueden adjuntar a las vistas mediante la condición INSTEAD OF. Se disparan varios disparadores en orden alfabético. Además de llamar a funciones escritas en PL/pgSQL nativo, los disparadores también pueden invocar funciones escritas en otros lenguajes como PL/Python o PL/Perl.

Notificaciones asíncronas

PostgreSQL proporciona un sistema de mensajería asíncrono al que se accede a través de los comandos NOTIFY, LISTEN y UNLISTEN. Una sesión puede emitir un comando NOTIFY, junto con el canal especificado por el usuario y una carga útil opcional, para marcar la ocurrencia de un evento en particular. Otras sesiones pueden detectar estos eventos emitiendo un comando LISTEN, que puede escuchar un canal en particular. Esta funcionalidad se puede usar para una amplia variedad de propósitos, como informar a otras sesiones cuando se actualizó una tabla o para que aplicaciones separadas detecten cuándo se realizó una acción en particular. Dicho sistema evita la necesidad de un sondeo continuo por parte de las aplicaciones para ver si algo ha cambiado y reduce los gastos generales innecesarios. Las notificaciones son totalmente transaccionales, en el sentido de que los mensajes no se envían hasta que se confirma la transacción desde la que se enviaron. Esto elimina el problema de los mensajes que se envían para realizar una acción que luego se revierte.

Muchos conectores para PostgreSQL brindan soporte para este sistema de notificación (incluidos libpq, JDBC, Npgsql, psycopg y node.js) para que lo puedan usar aplicaciones externas.

PostgreSQL puede actuar como un "pub/sub" persistente y efectivo. servidor o servidor de trabajos combinando LISTEN con FOR UPDATE SKIP LOCKED.

Reglas

Las reglas permiten que el "árbol de consulta" de una consulta entrante que se va a reescribir. "Reglas de reescritura de consultas" se adjuntan a una tabla/clase y "Re-Write" el DML entrante (seleccionar, insertar, actualizar y/o eliminar) en una o más consultas que reemplazan la instrucción DML original o se ejecutan además de ella. La reescritura de consultas se produce después del análisis de declaraciones DML, pero antes de la planificación de consultas.

Otras funciones de consulta

  • Transacciones
  • Búsqueda de texto completo
  • Vistas
    • Vistas materializadas
    • Vistas actualizadas
    • Vistas recuperativas
  • Interior, exterior (lleno, izquierda y derecha) y cruces
  • Subselectos
    • Subcuestiones relacionadas con el sector
  • Expresiones periódicas
  • Expresiones de mesa comunes y expresiones de mesa comunes
  • Conexiones cifradas a través de Transport Layer Security (TLS); las versiones actuales no utilizan SSL vulnerable, incluso con esa opción de configuración
  • Dominios
  • Puntos de venta
  • 2-phase commit
  • La Técnica de Almacenamiento de Atributos Oversized (TOAST) se utiliza para almacenar de forma transparente grandes atributos de mesa (como grandes adjuntos MIME o mensajes XML) en un área separada, con compresión automática.
  • SQL embedded se implementa usando preprocesador. SQL code se escribe primero incrustado en código C. Luego el código se ejecuta a través del preprocesador de ECPG, que reemplaza SQL con llamadas a la biblioteca de códigos. Luego el código se puede compilar usando un compilador C. Embedding funciona también con C++, pero no reconoce todos los constructos C+++.

Modelo de concurrencia

El servidor PostgreSQL está basado en procesos (no en subprocesos) y utiliza un proceso de sistema operativo por sesión de base de datos. El sistema operativo distribuye automáticamente varias sesiones en todas las CPU disponibles. Muchos tipos de consultas también se pueden paralelizar en múltiples procesos de trabajo en segundo plano, aprovechando múltiples CPU o núcleos. Las aplicaciones cliente pueden usar subprocesos y crear varias conexiones de base de datos a partir de cada subproceso.

Seguridad

PostgreSQL gestiona su seguridad interna por función. Por lo general, se considera que un rol es un usuario (un rol que puede iniciar sesión) o un grupo (un rol del cual son miembros otros roles). Los permisos se pueden otorgar o revocar en cualquier objeto hasta el nivel de columna, y también pueden permitir/prevenir la creación de nuevos objetos en los niveles de base de datos, esquema o tabla.

La función ETIQUETA DE SEGURIDAD de PostgreSQL (extensión de los estándares SQL) permite seguridad adicional; con un módulo cargable incluido que admite el control de acceso obligatorio (MAC) basado en etiquetas basado en la política de seguridad de Linux con seguridad mejorada (SELinux).

PostgreSQL admite de forma nativa una gran cantidad de mecanismos de autenticación externos, incluidos:

  • Contraseña: SCRAM-SHA-256, MD5 o texto simple
  • Generic Security Services Application Program Interface (GSSAPI)
  • Interfaz del Proveedor de Seguridad (SSPI)
  • Kerberos
  • ident (maps O/S nombre de usuario proporcionado por un servidor de identificación a nombre de usuario de la base de datos)
  • Peer (maps local user name to database user name)
  • Protocolo de acceso al directorio ligero (LDAP)
    • Active Directory (AD)
  • RADIUS
  • Certificado
  • Módulo de autenticación enchufable (PAM)

Los métodos GSSAPI, SSPI, Kerberos, par, ident y certificado también pueden usar un "mapa" archivo que enumera qué usuarios coincidentes con ese sistema de autenticación pueden conectarse como un usuario de base de datos específico.

Estos métodos se especifican en el archivo de configuración de autenticación basada en host del clúster (pg_hba.conf), que determina qué conexiones están permitidas. Esto permite controlar qué usuario puede conectarse a qué base de datos, desde dónde pueden conectarse (dirección IP, rango de direcciones IP, socket de dominio), qué sistema de autenticación se aplicará y si la conexión debe usar Transport Layer Security (TLS).

Cumplimiento de estándares

PostgreSQL afirma tener una conformidad alta, pero no completa, con el estándar SQL más reciente (para la versión 13 "en septiembre de 2020, PostgreSQL cumple con al menos 170 de las 179 funciones obligatorias para SQL: conformidad con el núcleo de 2016", y ninguna otra base de datos totalmente conforme a ella). Una excepción es el manejo de identificadores sin comillas como nombres de tablas o columnas. En PostgreSQL, se doblan, internamente, en minúsculas, mientras que el estándar dice que los identificadores sin comillas deben doblarse en mayúsculas. Por lo tanto, Foo debería ser equivalente a FOO no foo según el estándar. Otras deficiencias se refieren a la ausencia de tablas temporales que permitan el registro automático de versiones de filas durante las transacciones con la posibilidad de navegar en el tiempo (PARA predicado TIEMPO DEL SISTEMA).

Puntos de referencia y rendimiento

Se han realizado muchos estudios de rendimiento informales de PostgreSQL. Las mejoras de rendimiento destinadas a mejorar la escalabilidad comenzaron en gran medida con la versión 8.1. Los puntos de referencia simples entre la versión 8.0 y la versión 8.4 mostraron que la última era más de 10 veces más rápida en cargas de trabajo de solo lectura y al menos 7,5 veces más rápida en cargas de trabajo de lectura y escritura.

La primera evaluación comparativa estándar de la industria y validada por pares se completó en junio de 2007, utilizando Sun Java System Application Server (versión patentada de GlassFish) 9.0 Platform Edition, el servidor Sun Fire basado en UltraSPARC T1 y PostgreSQL 8.2. Este resultado de 778.14 SPECjAppServer2004 JOPS@Standard se compara favorablemente con 874 JOPS@Standard con Oracle 10 en un sistema HP-UX basado en Itanium.

En agosto de 2007, Sun presentó una puntuación comparativa mejorada de 813,73 SPECjAppServer2004 JOPS@Standard. Con el sistema bajo prueba a un precio reducido, la relación precio/rendimiento mejoró de $84,98/JOPS a $70,57/JOPS.

La configuración predeterminada de PostgreSQL utiliza solo una pequeña cantidad de memoria dedicada para fines críticos de rendimiento, como el almacenamiento en caché de bloques de bases de datos y la clasificación. Esta limitación se debe principalmente a que los sistemas operativos más antiguos requerían cambios en el kernel para permitir la asignación de grandes bloques de memoria compartida. PostgreSQL.org proporciona consejos sobre prácticas básicas de rendimiento recomendadas en un wiki.

En abril de 2012, Robert Haas de EnterpriseDB demostró la escalabilidad de CPU lineal de PostgreSQL 9.2 mediante un servidor con 64 núcleos.

Matloob Khushi realizó una evaluación comparativa entre PostgreSQL 9.0 y MySQL 5.6.15 por su capacidad para procesar datos genómicos. En su análisis de rendimiento, descubrió que PostgreSQL extrae regiones genómicas superpuestas ocho veces más rápido que MySQL utilizando dos conjuntos de datos de 80 000 cada uno, formando regiones aleatorias de ADN humano. La inserción y carga de datos en PostgreSQL también fue mejor, aunque la capacidad de búsqueda general de ambas bases de datos fue casi equivalente.

Plataformas

PostgreSQL está disponible para los siguientes sistemas operativos: Linux (todas las distribuciones recientes), instaladores x86 de 64 bits disponibles y probados para macOS (OS X) versión 10.6 y posteriores - Windows (con instaladores disponibles y probados para Windows de 64 bits) Server 2019 y 2016; algunas versiones anteriores de PostgreSQL se prueban en Windows 2008 R2, mientras que para la versión 10 de PostgreSQL y versiones anteriores hay disponible un instalador de 32 bits y se prueba en Windows 2008 R1 de 32 bits; compilable, por ejemplo, con Visual Studio, versión 2013 hasta la versión más reciente de 2019): FreeBSD, OpenBSD, NetBSD, AIX, HP-UX, Solaris y UnixWare; y no probado oficialmente: DragonFly BSD, BSD/OS, IRIX, OpenIndiana, OpenSolaris, OpenServer y Tru64 UNIX. La mayoría de los demás sistemas similares a Unix también podrían funcionar; soporte más moderno.

PostgreSQL funciona en cualquiera de las siguientes arquitecturas de conjunto de instrucciones: x86 y x86-64 en Windows XP (o posterior) y otros sistemas operativos; estos son compatibles con Windows: IA-64 Itanium (soporte externo para HP-UX), PowerPC, PowerPC 64, S/390, S/390x, SPARC, SPARC 64, ARMv8-A (64 bits) y ARM anterior (32 bits, incluidos los más antiguos, como ARMv6 en Raspberry Pi), MIPS, MIPSel y PA-RISC. También se sabía que funcionaba en algunas otras plataformas (aunque no se probó durante años, es decir, para las últimas versiones).

Administración de bases de datos

Las interfaces y herramientas de código abierto para administrar PostgreSQL incluyen:

psql
El front-end primario para PostgreSQL es el psql programa de línea de comandos, que se puede utilizar para introducir consultas SQL directamente, o ejecutarlas desde un archivo. Además, psql proporciona una serie de meta-commands y varias características similares a shell para facilitar la escritura scripts y automatizar una amplia variedad de tareas; por ejemplo, la terminación de nombres de objetos y la sintaxis SQL.
pgAdmin
El paquete pgAdmin es una herramienta de administración gráfica gratuita y de código abierto (GUI) para PostgreSQL, que se admite en muchas plataformas de ordenador. El programa está disponible en más de una docena de idiomas. El primer prototipo, llamado pgManager, fue escrito para PostgreSQL 6.3.2 de 1998, y reescrito y liberado como pgAdmin bajo la Licencia Pública General de GNU (GPL) en meses posteriores. La segunda encarnación (llamada pgAdmin II) fue una reescritura completa, publicada por primera vez el 16 de enero de 2002. La tercera versión, pgAdmin III, fue publicada originalmente bajo la Licencia Artística y luego publicada bajo la misma licencia que PostgreSQL. A diferencia de versiones anteriores que fueron escritas en Visual Basic, pgAdmin III está escrito en C+++, utilizando el marco wxWidgets que le permite ejecutar en los sistemas operativos más comunes. La herramienta de consulta incluye un lenguaje de scripting llamado pgScript para apoyar tareas de administración y desarrollo. En diciembre de 2014, Dave Page, fundador del proyecto pgAdmin y desarrollador primario, anunció que con el cambio hacia modelos basados en la web, el trabajo ha comenzado en pgAdmin 4 con el objetivo de facilitar el despliegue de nubes. En 2016, pgAdmin 4 fue lanzado. pgAdmin 4 backend fue escrito en Python, usando Flask y Qt framework.
phpPgAdmin
phpPgAdmin es una herramienta de administración basada en web para PostgreSQL escrita en PHP y basada en la popular interfaz phpMyAdmin escrita originalmente para MySQL administración.
PostgreSQL Studio
PostgreSQL Studio permite a los usuarios realizar tareas esenciales de desarrollo de bases de datos PostgreSQL desde una consola basada en la web. PostgreSQL Studio permite a los usuarios trabajar con bases de datos en la nube sin necesidad de abrir cortafuegos.
TeamPostgreSQL
Interfaz web impulsada por AJAX/JavaScript para PostgreSQL. Permite navegar, mantener y crear datos y objetos de base a través de un navegador web. La interfaz ofrece editor SQL tabbed con autocompletion, widgets de edición de hileras, clic a través de la navegación de teclas extranjeras entre hileras y tablas, favoritos administración para scripts de uso común, entre otras características. Soporta SSH tanto para la interfaz web como para las conexiones de bases de datos. Los instaladores están disponibles para Windows, Macintosh y Linux, y un simple archivo multiplataforma que funciona desde un script.
LibreOffice, OpenOffice.org
LibreOffice y OpenOffice.org La base se puede utilizar como un front-end para PostgreSQL.
pgBadger
El analizador de registro de pgBadger PostgreSQL genera informes detallados de un archivo de registro PostgreSQL.
pgDevOps
pgDevOps es un conjunto de herramientas web para instalar y gestionar múltiples versiones PostgreSQL, extensiones y componentes comunitarios, desarrollar consultas SQL, monitorear bases de datos y encontrar problemas de rendimiento.
Adminer
Adminer es una sencilla herramienta de administración web para PostgreSQL y otros, escrita en PHP.
pgBackRest
pgBackRest es una herramienta de respaldo y restauración para PostgreSQL que proporciona soporte para copias de seguridad completas, diferenciales y incrementales.
pgaudit
pgaudit es una extensión PostgreSQL que proporciona un registro detallado de la sesión y/o la auditoría de objetos a través de la instalación de registro estándar proporcionada por PostgreSQL.
wal-e
Wal-e es una herramienta de copia de seguridad y restauración para PostgreSQL que proporciona soporte para copias de seguridad físicas (con base WAL), escritas en Python

Varias empresas ofrecen herramientas propietarias para PostgreSQL. A menudo consisten en un núcleo universal que se adapta a varios productos de bases de datos específicos. Estas herramientas comparten principalmente las funciones de administración con las herramientas de código abierto, pero ofrecen mejoras en el modelado, importación, exportación o generación de informes de datos.

Usuarios destacados

Las organizaciones y productos destacados que utilizan PostgreSQL como base de datos principal incluyen:

  • Microsoft, utilizado para un panel de análisis “Release Quality View” (RQV), que rastrea la calidad de las actualizaciones de Windows analizando tipos de métricas de más de 800M dispositivos Windows.
  • En 2009, el sitio web de redes sociales Myspace utilizó la base de datos nCluster de Aster Data Systems para el almacenamiento de datos, que se construyó en PostgreSQL no modificado.
  • Geni.com utiliza PostgreSQL para su base de datos principal de genealogía.
  • OpenStreetMap, un proyecto colaborativo para crear un mapa editable gratuito del mundo.
  • Afilias, registros de dominio para.org,.info y otros.
  • Sony Online multijugador juegos en línea.
  • BASF, plataforma comercial para su portal de agronegocios.
  • Reddit social news website.
  • Aplicación Skype VoIP, bases de datos de negocios centrales.
  • Sun xVM, la virtualización de Sun y la suite de automatización de centros de datos.
  • MusicBrainz, enciclopedia de música en línea abierta.
  • La Estación Espacial Internacional – para recopilar datos de telemetría en órbita y reproducirlos en tierra.
  • MyYearbook sitio de redes sociales.
  • Instagram, un servicio móvil para compartir fotos.
  • Disqus, un servicio de discusión en línea y comentarios.
  • Sitio web TripAdvisor, información sobre viajes de contenido generado principalmente por el usuario.
  • Yandex, una compañía rusa de internet cambió su Yandex. Servicio de correo de Oracle a Postgres.
  • Amazon Redshift, parte de AWS, un sistema de procesamiento analítico en línea columnar (OLAP) basado en las modificaciones Postgres de ParAccel.
  • National Oceanic and Atmospheric Administration (NOAA) National Weather Service (NWS), Interactive Forecast Preparation System (IFPS), un sistema que integra datos de los sistemas de radares meteorológicos, superficie e hidrología NEXRAD para construir modelos detallados de pronóstico localizados.
  • El servicio meteorológico nacional del Reino Unido, Met Office, ha comenzado a intercambiar Oracle para PostgreSQL en una estrategia para desplegar más tecnología de código abierto.
  • WhitePages.com había estado usando Oracle y MySQL, pero cuando se trataba de mover sus directorios centrales en casa, se volvió a PostgreSQL. Debido a que WhitePages.com necesita combinar grandes conjuntos de datos de múltiples fuentes, la capacidad de PostgreSQL para cargar e indexar datos a altas tasas fue una clave para su decisión de utilizar PostgreSQL.
  • FlightAware, un sitio web de seguimiento de vuelos.
  • Grofers, un servicio de entrega de comestibles en línea.
  • The Guardian emigró de MongoDB a PostgreSQL en 2018.
  • Yugabyte DB implementa la capa de consulta PostgreSQL como su modo SQL predeterminado

Implementaciones de servicios

Algunos proveedores destacados ofrecen PostgreSQL como software como servicio:

  • Heroku, una plataforma como proveedor de servicios, ha apoyado PostgreSQL desde el inicio de 2007. Ofrecen características de valor añadido como base de datos completa Roll-back (capacidad de restaurar una base de datos desde cualquier momento especificado), que se basa en WAL-E, software de código abierto desarrollado por Heroku.
  • In January 2012, Enterprise DB lanzó una versión en la nube de PostgreSQL y su propio servidor avanzado Postgres Plus propietario con provisión automatizada para el desvío, replicación, reducción de carga y escalado. Funciona en Amazon Web Services. Desde 2015, Postgres Advanced Server ha sido ofrecido como ApsaraDB para PPAS, una base de datos relacional como un servicio en Alibaba Cloud.
  • VMware ha ofrecido vFabric Postgres (también llamado vPostgres) para nubes privadas en VMware vSphere desde mayo de 2012. La compañía anunció Final de Disponibilidad (EOA) del producto en 2014.
  • En noviembre de 2013, Amazon Web Services anunció la adición de PostgreSQL a su oferta de servicio de base de datos relacional.
  • En noviembre de 2016, Amazon Web Services anunció la adición de compatibilidad con PostgreSQL a su oferta de base de datos gestionada Amazon Aurora nativa de la nube.
  • En mayo de 2017, Microsoft Azure anunció bases de datos Azure para PostgreSQL
  • En mayo de 2019, Alibaba Cloud anunció PolarDB para PostgreSQL.
  • Jelastic Multicloud Platform as a Service provides container-based PostgreSQL support since 2011. Ofrecen replicación asincrónica automatizada de PostgreSQL disponible desde el mercado.
  • En junio de 2019, IBM Cloud anunció IBM Cloud Hyper Protect DBaaS para PostgreSQL.
  • En septiembre de 2020, Crunchy Data anunció el Puente Crunchy.

Historial de versiones

Historia de la liberación
Liberación Primera liberación Última versión menor Última publicación Fin del
vida
Hitos
6.0 1997-01-29 Primera versión formal de PostgreSQL, índices únicos, utilidad pg_dumpall, autenticación de identidad
6.1 1997-06-08 Versión antigua, ya no se mantiene: 6.1.1 1997-07-22 Índices multicolumnos, secuencias, tipo de datos de dinero, GEQO (GEnetic Query Optimizer)
6.2 1997-10-02 Versión antigua, ya no se mantiene: 6.2.1 1997-10-17 Interfaz JDBC, disparadores, interfaz de programación del servidor, limitaciones
6.3 1998-03-01 Versión antigua, ya no se mantiene: 6.3.2 1998-04-07 2003-03-01 Capacidad de subselección SQL-92, PL/pgTCL
6.4 1998 a 30 Versión antigua, ya no se mantiene: 6.4.2 1998-12-20 2003-10-30 VIEWs (then only read-only) and RULEs, PL/pgSQL
6.5 1999-06-09 Versión antigua, ya no se mantiene: 6.5.3 1999-10-13 2004-06-09 MVCC, tablas temporales, más soporte de declaración SQL (CASE, INTERSECT y EXCEPT)
7.0 2000-05-08 Versión antigua, ya no se mantiene: 7.0.3 2000-11-11 2004-05-08 Teclas extranjeras, sintaxis SQL-92 para uniones
7.1 2001-04-13 Versión antigua, ya no se mantiene: 7.1.3 2001-08-15 2006-04-13 Bitácora de escritura, uniones externas
7.2 2002-02-04 Versión antigua, ya no se mantiene: 7.2.8 2005-05-09 2007-02-04 PL/Python, OIDs ya no es necesario, internacionalización de mensajes
7.3 2002-11-27 Versión antigua, ya no se mantiene: 7.3.21 2008-01-07 2007-11-27 Schema, función de mesa, consulta preparada
7.4 2003-11-17 Versión antigua, ya no se mantiene: 7.4.30 2010-10-04 2010-10-01 Optimización de las funciones de ensamblaje y almacenamiento de datos
8.0 2005-01-19 Versión antigua, ya no se mantiene: 8.0.26 2010-10-04 2010-10-01 Servidor nativo en Microsoft Windows, puntos de ahorro, espacios de mesa, recuperación puntual
8.1 2005-11-08 Versión antigua, ya no se mantiene: 8.1.23 2010-12-16 2010-11-08 Optimización de rendimiento, compromiso de dos fases, partición de tablas, análisis de bitmap índice, bloqueo de fila compartido, roles
8.2 2006-12-05 Versión antigua, ya no se mantiene: 8.2.23 2011-12-05 2011-12-05 Optimización de rendimiento, generación de índices en línea, bloqueos de asesoramiento, standby caliente
8.3 2008-02-04 Versión antigua, ya no se mantiene: 8.3.23 2013-02-07 2013-02-07 Tuples solo para saltar, búsqueda completa de texto, SQL/XML, tipos ENUM, tipos UUID
8.4 2009-07-01 Versión antigua, ya no se mantiene: 8.4.22 2014-07-24 2014-07-24 Funciones de ensanchamiento, permisos de nivel de columna, restauración paralela de bases de datos, colación por base de datos, expresiones comunes de tabla y consultas recursivas
9.0 2010-09-20 Versión antigua, ya no se mantiene: 9.0.23 2015-10-08 2015-10-08 Reproducción de streaming binario integrada, soporte caliente, capacidad de actualización en el lugar, Windows de 64 bits
9.1 2011-09-12 Versión antigua, ya no se mantiene: 9.1.24 2016-10-27 2016-10-27 Replicación sincrónica, collations per-column, tablas sin etiquetar, aislamiento de instantáneas serializable, expresiones de mesa comunes escribibles, integración SELinux, extensiones, tablas extranjeras
9.2 2012-09-10 Versión antigua, ya no se mantiene: 9.2.24 2017-11-09 2017-11-09 Reproducción de secuencias de cascada, escaneos indices, soporte JSON nativo, mejor gestión de bloqueos, tipos de gama, herramienta pg_receivexlog, índices GiST equipados con espacio
9.3 2013-09-09 Versión antigua, ya no se mantiene: 9.3.25 2018-11-08 2018-11-08 Trabajadores de fondo personalizados, compruebas de datos, operadores JSON dedicados, LATERAL Únete, más rápido pg_dump, nueva herramienta de monitoreo de servidores pg_isready, características de disparador, funciones de vista, tablas externas escribibles, vistas materializadas, mejoras de replicación
9.4 2014-12-18 Versión antigua, ya no se mantiene: 9.4.26 2020-02-13 2020-02-13 Tipo de datos JSONB, declaración ALTER SYSTEM para cambiar los valores de configuración, la capacidad de refrescar las vistas materializadas sin bloquear lecturas, registro dinámico/iniciar/iniciar los procesos de los trabajadores de fondo, API de decodificación lógica, mejoras del índice GiN, soporte de página enorme Linux, recarga de caché de base a través de pg_prewarm, reintroduciendo Hstore como el tipo de columna de opción para los datos del estilo de documentos.
9.5 2016-01-07 Versión antigua, ya no se mantiene: 9.5.25 2021-02-11 2021-02-11 UPSERT, seguridad de nivel de filas, TABLESAMPLE, CUBE/ROLLUP, SETS GROUPING y nuevo índice BRIN
9.6 2016-09-29 Versión antigua, ya no se mantiene: 9.6.24 2021-11-11 2021-11-11 Asistencia para consultas paralelas, envoltorio de datos extranjeros PostgreSQL (FDW) mejora con empuje de tipo/junio, múltiples standbys sincronizados, aspiración más rápida de tabla grande
10 2017-10-05 Versión antigua, ya no se mantiene: 10.23 2022-11-10 2022-11-10 Replicación lógica, partición de mesa declarativa, paralelismo de consulta mejorado
11 2018-10-18 Versión más antigua, sin embargo, mantenida: 11.18 2022-11-10 2023-11-09 Aumento de la robustez y el rendimiento para la partición, las transacciones apoyadas en los procedimientos almacenados, mayores capacidades para el paralelismo de la consulta, compilación de tiempo justo (JIT) para las expresiones
12 2019-10-03 Versión más antigua, sin embargo, mantenida: 12.13 2022-11-10 2024-11-14 Mejoras en el rendimiento de las consultas y la utilización del espacio; soporte de expresión SQL/JSON; columnas generadas; mejoras en la internacionalización y autenticación; nueva interfaz de almacenamiento de tablas enchufable.
13 2020-09-24 Versión más antigua, sin embargo, mantenida: 13.9 2022-11-10 2025-11-13 Economía espacial y ganancias de rendimiento de la deduplicación de entradas de índices de árboles B, mejora del rendimiento de las consultas que utilizan agregados o tablas divididas, mejor planificación de las consultas al utilizar estadísticas extendidas, aspiración paralela de índices, clasificación incremental
14 2021-09-30 Versión más antigua, sin embargo, mantenida: 14.6 2022-11-10 2026-11-12 Las cláusulas SQL-standard SEARCH y CYCLE agregadas para las expresiones comunes de tabla, permiten que el DISTINCT sea añadido al GRUPO POR
15 2022-10-13 Versión estable actual: 15.1 2022-11-10 2027-11-11 Implementa la declaración MERGE estándar de SQL. PL/Python ahora solo admite corriente Python 3, y plpythonu significa el descontinuado Python 3.
Leyenda:
Versión antigua
Versión más antigua, todavía mantenida
Última versión
Última versión de vista previa
Liberación del futuro

Contenido relacionado

Frente del lado del bus

El bus frontal es una interfaz de comunicación de computadora que se usaba a menudo en computadoras basadas en chips Intel durante las décadas de 1990 y...

Sistema de archivos de alto rendimiento

Barra invertida

La barra invertida es una marca tipográfica utilizada principalmente en informática y matemáticas. Es la imagen reflejada de la barra inclinada común /....
Más resultados...
Tamaño del texto:
Copiar