PostgreSQL: el gestor de bases de datos a fondo
Si, además de datos alfanuméricos (letras, cifras, caracteres especiales) también se procesan tipos de datos complejos o contenido multimedia, los gestores de bases de datos relacionales alcanzan sus límites pronto. Las bases de datos objeto-relacionales, en cambio, así como todos los gestores que amplían el modelo tradicional con paradigmas orientados a objetos, tienen la respuesta justa a esta problemática: el llamado mapeo objeto-relacional (object-relational mapping) permite a estas BD guardar objetos también en sistemas relacionales utilizando aplicaciones escritas en lenguajes de programación orientados a objetos. Una de las soluciones más veteranas en este campo y también de las más populares es la BD de código abierto PostgreSQL, también conocida como Postgres.
¿Qué es PostgreSQL?
PostgreSQL carga a sus espaldas con más de 30 años de desarrollo. Este gestor de bases de datos objeto-relacionales (ORDBMS) tiene su origen en el proyecto POSTGRES de la Universidad de California en Berkeley, iniciado en 1986 bajo la dirección de Michael Stonebraker y que obtuvo financiación de la Agencia de Proyectos de Investigación Avanzados de Defensa (DARPA) y de la Fundación Nacional para la Ciencia (NSF), entre otros entes norteamericanos. En 1994 los estudiantes Andrew Yu y Jolly Chen ampliaron el código básico con un intérprete para SQL, publicándose esta nueva versión, de un 30 % a un 50 % más rápida, con el nombre de Postgres95 y como solución open source (con una licencia propia similar a BSD y MIT). Dos años más tarde, la aplicación para bases de datos obtiene con la versión 6.0 su nombre actual, PostgreSQL.
Junto al nuevo nombre, PostgreSQL, también sigue utilizándose el original, Postgres, para referirse al sistema de base de datos, si bien pocas veces completamente en mayúsculas. Excepto por cierta nostalgia, este hábito puede explicarse porque la pronunciación oral del segundo es más sencilla.
El proyecto POSTGRES desempeñó una valiosa labor pionera y elaboró un gran número de conceptos que solo encontraron aplicación mucho más tarde en otros sistemas de base de datos, sobre todo comerciales. Y es que PostgreSQL no solo se distingue como una base de datos compatible con SQL, sino también por estos rasgos:
- Posibilidad de realizar consultas complejas;
- Clave foránea para conectar datos de dos tablas;
- Disparadores (trigger) que se inician de forma automática a partir de una entrada y la comprueban, la confirman o la eliminan o emplean datos de referencia;
- Vistas actualizables;
- Concepto muy amplio de transacción;
- Control de concurrencia mediante versiones múltiples (Multiversion Concurrency Control, MVCC) para que el acceso simultáneo a la BD se ejecute de forma eficiente.
Por último, la licencia libre permite a los usuarios modificar y ampliar PosgreSQL con gran libertad para, de este modo, añadir tipos nuevos de datos, funciones, operadores, métodos de indización o lenguajes procedurales (lenguajes de programación para escribir funciones y disparadores).
Postgres: datos clave y requisitos de sistema
La flexibilidad de PostgreSQL no solo se pone de relieve en el terreno de la funcionalidad y la capacidad para ampliarse y ajustarse, sino también en la instalación del software y el hardware. De hecho, Postgres está integrado en la mayoría de distribuciones UNIX/Linux y Apple lo incluye desde Mac OS X Lion (10.7) como la base de datos por defecto. La única condición es tener instalada una versión actual de gmake (3.80 o superior) –ya está incluida en los archivos binarios listos para descargar. Y con los paquetes de instalación pertinentes, también los sistemas operativos Windows son una opción. La potencia y el espacio necesarios dependen únicamente del tamaño del sistema de base de datos que se quiere instalar (nuestro software open source, por ejemplo, requiere solo unos escasos 20 MB).
Como en la práctica es más probable verse limitado por la memoria disponible en el equipo que por el propio PostgreSQL, mostramos a continuación los datos más importantes sobre la base de datos objeto-relacional:
Tamaño máximo de la base de datos | Ilimitado |
Tamaño máximo de una tabla | 32 terabytes |
Tamaño máximo de un registro | 1,6 terabytes |
Tamaño máximo de una celda | 1 gigabytes |
Número máximo de columnas | En función del tipo de dato, de 250 a 1 600 |
Número máximo de filas | Ilimitado |
Número máximo de índices | Ilimitado |
¿Cómo funciona PostgreSQL?
Postgres se basa en el clásico modelo cliente-servidor: el componente central que hace de servidor, con el nombre de “postmaster”, administra todos los archivos de la BD, así como todas las conexiones que se establecen con el servidor de la BD para las funciones de comunicación (input/output). Para establecer estas conexiones solo se necesita un programa-cliente, si bien el paquete de software de PostgreSQL ya integra de forma nativa el cliente psql para operarlo desde la terminal de líneas de comando. También podría optarse por una aplicación con interfaz gráfica de usuario como pgAdmin o phpPgAdmin, fáciles de instalar y manejar. En las páginas web interactivas es el servidor web el que se encarga de hacer de cliente.
Muchas distribuciones Linux entregan con pgAccess un cliente Postgres gráfico propio.
¿En qué proyectos podría utilizarse a PostgreSQL?
Como sistema de gestión de bases de datos acreditado y extremadamente flexible, Postgres se utiliza en numerosos sectores y escenarios diferentes, erigiéndose como una base inmejorable para operar con seguridad las más diversas aplicaciones. Por ejemplo, gracias a su concepto de transacción integrado y su compatibilidad con MVCC (Multiversion concurrency control), el proyecto constituye una solución perfecta para el software de banca online. También los programas de análisis como Matlab o R armonizan con la base de datos, lo que hace que suelan utilizarse combinados. Complementado con la extensión PostGIS, que provee cientos de funciones para trabajar con datos geográficos, Postgres también saca buena nota en el trabajo con datos espaciales y geográficos.
PostgreSQL también es popular como solución para proyectos web, funcionando con varios frameworks modernos como Django, Node.js o Ruby on Rails y soportando los lenguajes clásicos de programación, como PHP. Al soportar la replicación síncrona y asíncrona, los datos pueden distribuirse fácilmente en varios servidores con el fin de garantizar una elevada seguridad ante caídas y un tiempo de acceso mínimo a los datos importantes.
El soporte de JSON también convierte a PostgreSQL en una solución excelente de base de datos para escalar cargas de trabajo (workloads) de NoSQL.
Instalar PostgreSQL en Linux y Windows
Todo aquel que quiera utilizar Postgres para su proyecto puede instalar el gestor de bases de datos en unos pocos pasos sin tener que adquirir una licencia. En el portal de descargas de la página de PostgreSQL se facilitan los archivos binarios necesarios así como los enlaces a los repositorios de los paquetes fuente para BSD, Linux, macOS, Solaris y Windows, que pueden instalarse y utilizarse sin coste. No es necesario disponer de derechos raíz: para la ejecución es suficiente con tener simples derechos de administrador.
En los siguientes apartados mostramos cómo se lleva a cabo la instalación de PostgreSQL en Linux (Ubuntu 17.10) y Windows.
Instalar PostgreSQL en Linux (Ubuntu 17.10)
El repositorio apt de Postgres soporta oficialmente las versiones LTS de Ubuntu (desde la 14.04) y otras como Ubuntu 17.04. Los paquetes fuente acostumbran a funcionar también en otras versiones, pero el equipo de PostgreSQL recomienda utilizar una versión de TLS lo más actual posible para que a largo plazo se aprovechen mejor las ventajas del programa. Como en Ubuntu los paquetes ya están incluidos en el repositorio estándar, con el gestor de paquetes apt pueden instalarse sin problemas:
sudo apt-get update
sudo apt-get install postgresql postgresql-contrib
Este es el comando con el que se instala PostgreSQL y se crea automáticamente un usuario Linux con el nombre de “postgres” que permitirá acceder a la base de datos y que por seguridad solo debería utilizarse para esto. También se recomienda proteger este perfil con una contraseña, puesto que por defecto no hay ninguna. Para ello solo tienes que introducir el siguiente comando y la contraseña elegida dos veces:
sudo passwd postgres
Junto al usuario Linux “postgres”, también existe un usuario homónimo de la BD que será necesario para su administración y que también debería protegerse con una contraseña segura. Para hacerlo, se escribe el siguiente comando (“contraseña nueva” sustituye a la contraseña que has elegido):
su - postgres
psql -d template1 -c "ALTER USER postgres WITH PASSWORD ''contraseña nueva';"
Para comprobar que la instalación se ejecutó correctamente, puedes crear una base de datos de prueba (testdb) con la cuenta “postgres” y administrarla con el cliente-terminal psql:
su - postgres
createdb testdb
psql testdb
En la terminal se muestra entonces esta salida del shell del cliente psql, que se maneja con comandos de SQL:
Instalar PostgreSQL en Windows
Instalar Postgres en un ordenador Windows es muy fácil gracias al instalador certificado por EnterpriseDB, que incluye el fabricante y que puede descargarse gratuitamente en la página de la empresa. Para descargar al asistente para la instalación, que ofrece herramientas extra así como soporte comercial para PostgreSQL, solo hay que seleccionar la versión pertinente del gestor de bases de datos y presionar “Download now”.
Una vez descargado, se inicia el asistente con doble clic, instalándose en primer lugar el compilador de Microsoft Visual C++ (si no está ya configurado en el sistema). A continuación se selecciona el lugar para guardar PostgreSQL y se excluyen los componentes que no sean necesarios. Los más relevantes son el servidor PostgreSQL y las herramientas de líneas de comando –el cliente gráfico pgAdmin o el Stack Builder (para descargas e instalaciones simples de extensiones) no son estrictamente necesarios, pero facilitan mucho el trabajo con el programa.
Si ya se indicó dónde se guardarán los datos, solo queda asignar una contraseña al perfil de la cuenta de administración de la base de datos “postgres”. Los ajustes de puerto y localización pueden dejarse tal como están antes de iniciar la instalación en el último paso.
Tras la instalación, en la interfaz de usuario de pgAdmin (si se ha instalado) puede establecerse una conexión al servidor de PostgreSQL. Selecciona para ello la versión instalada en la lista de servidores pulsando el botón derecho del ratón y haz clic finalmente en “Connect server”.
Tras teclear la contraseña para la cuenta admin “postgres”, el cliente inicia la conexión.
Ventajas e inconvenientes de PostgreSQL
Ventajas | Inconvenientes |
Open source | No está disponible por defecto en todos los hosters |
Altamente ampliable | La documentación es mejorable y está solo disponible en inglés |
En gran parte conforme con el estándar SQL | La velocidad de lectura es menor que en otros gestores |
Permite procesar tipos complejos de datos (p. ej., datos geográficos) | |
Búsqueda de texto completo flexible | |
Pueden crearse funciones propias, triggers, tipos de datos, etc. | |
Amplia compatibilidad con varios lenguajes (Python, Java, Perl, PHP, C, C++, etc.) | |
Soporta JSON | |
Multiplataforma |