Si, además de datos al­fa­nu­mé­ri­cos (letras, cifras, ca­ra­c­te­res es­pe­cia­les) también se procesan tipos de datos complejos o contenido mu­l­ti­me­dia, los gestores de bases de datos re­la­cio­na­les alcanzan sus límites pronto. Las bases de datos objeto-re­la­cio­na­les, en cambio, así como todos los gestores que amplían el modelo tra­di­cio­nal con pa­ra­di­g­mas orie­n­ta­dos a objetos, tienen la respuesta justa a esta pro­ble­má­ti­ca: el llamado mapeo objeto-re­la­cio­nal (object-re­la­tio­nal mapping) permite a estas BD guardar objetos también en sistemas re­la­cio­na­les uti­li­za­n­do apli­ca­cio­nes escritas en lenguajes de pro­gra­ma­ción orie­n­ta­dos a objetos. Una de las so­lu­cio­nes más veteranas en este campo y también de las más populares es la BD de código abierto Po­s­t­gre­S­QL, también conocida como Postgres.

¿Qué es Po­s­t­gre­S­QL?

Po­s­t­gre­S­QL carga a sus espaldas con más de 30 años de de­sa­rro­llo. Este gestor de bases de datos objeto-re­la­cio­na­les (ORDBMS) tiene su origen en el proyecto POSTGRES de la Uni­ve­r­si­dad de Ca­li­fo­r­nia en Berkeley, iniciado en 1986 bajo la dirección de Michael Sto­ne­bra­ker y que obtuvo fi­na­n­cia­ción de la Agencia de Proyectos de In­ve­s­ti­ga­ción Avanzados de Defensa (DARPA) y de la Fundación Nacional para la Ciencia (NSF), entre otros entes no­r­te­ame­ri­ca­nos. En 1994 los es­tu­dia­n­tes Andrew Yu y Jolly Chen ampliaron el código básico con un in­té­r­pre­te para SQL, pu­bli­cá­n­do­se 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 apli­ca­ción para bases de datos obtiene con la versión 6.0 su nombre actual, Po­s­t­gre­S­QL.

Nota

Junto al nuevo nombre, Po­s­t­gre­S­QL, también sigue uti­li­zá­n­do­se el original, Postgres, para referirse al sistema de base de datos, si bien pocas veces co­m­ple­ta­me­n­te en ma­yú­s­cu­las. Excepto por cierta nostalgia, este hábito puede ex­pli­car­se porque la pro­nu­n­cia­ció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 en­co­n­tra­ron apli­ca­ción mucho más tarde en otros sistemas de base de datos, sobre todo co­me­r­cia­les. Y es que Po­s­t­gre­S­QL no solo se distingue como una base de datos co­m­pa­ti­ble con SQL, sino también por estos rasgos:

  • Po­si­bi­li­dad de realizar consultas complejas;
  • Clave foránea para conectar datos de dos tablas;
  • Di­s­pa­ra­do­res (trigger) que se inician de forma au­to­má­ti­ca a partir de una entrada y la co­m­prue­ban, la confirman o la eliminan o emplean datos de re­fe­re­n­cia;
  • Vistas ac­tua­li­za­bles;
  • Concepto muy amplio de tra­n­sac­ción;
  • Control de co­n­cu­rre­n­cia mediante versiones múltiples (Mu­l­ti­ve­r­sion Co­n­cu­rre­n­cy Control, MVCC) para que el acceso si­mu­l­tá­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, ope­ra­do­res, métodos de in­di­za­ción o lenguajes pro­ce­du­ra­les (lenguajes de pro­gra­ma­ción para escribir funciones y di­s­pa­ra­do­res).

Postgres: datos clave y re­qui­si­tos de sistema

La fle­xi­bi­li­dad de Po­s­t­gre­S­QL no solo se pone de relieve en el terreno de la fu­n­cio­na­li­dad y la capacidad para ampliarse y ajustarse, sino también en la in­s­ta­la­ción del software y el hardware. De hecho, Postgres está integrado en la mayoría de di­s­tri­bu­cio­nes 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 in­s­ta­la­ción pe­r­ti­ne­n­tes, también los sistemas ope­ra­ti­vos Windows son una opción. La potencia y el espacio ne­ce­sa­rios dependen úni­ca­me­n­te 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 di­s­po­ni­ble en el equipo que por el propio Po­s­t­gre­S­QL, mostramos a co­n­ti­nua­ción los datos más im­po­r­ta­n­tes sobre la base de datos objeto-re­la­cio­nal:

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 Po­s­t­gre­S­QL?

Postgres se basa en el clásico modelo cliente-servidor: el co­m­po­ne­n­te central que hace de servidor, con el nombre de “po­s­t­ma­s­ter”, ad­mi­ni­s­tra todos los archivos de la BD, así como todas las co­ne­xio­nes que se es­ta­ble­cen con el servidor de la BD para las funciones de co­mu­ni­ca­ción (input/output). Para es­ta­ble­cer estas co­ne­xio­nes solo se necesita un programa-cliente, si bien el paquete de software de Po­s­t­gre­S­QL 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 apli­ca­ción con interfaz gráfica de usuario como pgAdmin o ph­p­P­gA­d­min, fáciles de instalar y manejar. En las páginas web in­ter­ac­ti­vas es el servidor web el que se encarga de hacer de cliente.

Consejo

Muchas di­s­tri­bu­cio­nes Linux entregan con pgAccess un cliente Postgres gráfico propio.

¿En qué proyectos podría uti­li­zar­se a Po­s­t­gre­S­QL?

Como sistema de gestión de bases de datos acre­di­ta­do y ex­tre­ma­da­me­n­te flexible, Postgres se utiliza en numerosos sectores y es­ce­na­rios di­fe­re­n­tes, eri­gié­n­do­se como una base in­me­jo­ra­ble para operar con seguridad las más diversas apli­ca­cio­nes. Por ejemplo, gracias a su concepto de tra­n­sac­ción integrado y su co­m­pa­ti­bi­li­dad con MVCC (Mu­l­ti­ve­r­sion co­n­cu­rre­n­cy control), el proyecto co­n­s­ti­tu­ye 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 uti­li­zar­se co­m­bi­na­dos. Co­m­ple­me­n­ta­do con la extensión PostGIS, que provee cientos de funciones para trabajar con datos geo­grá­fi­cos, Postgres también saca buena nota en el trabajo con datos es­pa­cia­les y geo­grá­fi­cos.

Po­s­t­gre­S­QL también es popular como solución para proyectos web, fu­n­cio­na­n­do con varios fra­me­wo­r­ks modernos como Django, Node.js o Ruby on Rails y so­po­r­ta­n­do los lenguajes clásicos de pro­gra­ma­ción, como PHP. Al soportar la re­pli­ca­ción síncrona y asíncrona, los datos pueden di­s­tri­bui­r­se fá­ci­l­me­n­te en varios se­r­vi­do­res con el fin de ga­ra­n­ti­zar una elevada seguridad ante caídas y un tiempo de acceso mínimo a los datos im­po­r­ta­n­tes.

Nota

El soporte de JSON también convierte a Po­s­t­gre­S­QL en una solución excelente de base de datos para escalar cargas de trabajo (workloads) de NoSQL.

Instalar Po­s­t­gre­S­QL 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 Po­s­t­gre­S­QL se facilitan los archivos binarios ne­ce­sa­rios así como los enlaces a los re­po­si­to­rios de los paquetes fuente para BSD, Linux, macOS, Solaris y Windows, que pueden in­s­ta­lar­se y uti­li­zar­se sin coste. No es necesario disponer de derechos raíz: para la ejecución es su­fi­cie­n­te con tener simples derechos de ad­mi­ni­s­tra­dor.

En los si­guie­n­tes apartados mostramos cómo se lleva a cabo la in­s­ta­la­ción de Po­s­t­gre­S­QL en Linux (Ubuntu 17.10) y Windows.

Instalar Po­s­t­gre­S­QL en Linux (Ubuntu 17.10)

El re­po­si­to­rio apt de Postgres soporta ofi­cia­l­me­n­te las versiones LTS de Ubuntu (desde la 14.04) y otras como Ubuntu 17.04. Los paquetes fuente aco­s­tu­m­bran a funcionar también en otras versiones, pero el equipo de Po­s­t­gre­S­QL re­co­mie­n­da utilizar una versión de TLS lo más actual posible para que a largo plazo se apro­ve­chen mejor las ventajas del programa. Como en Ubuntu los paquetes ya están incluidos en el re­po­si­to­rio estándar, con el gestor de paquetes apt pueden in­s­ta­lar­se sin problemas:

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

Este es el comando con el que se instala Po­s­t­gre­S­QL y se crea au­to­má­ti­ca­me­n­te un usuario Linux con el nombre de “postgres” que permitirá acceder a la base de datos y que por seguridad solo debería uti­li­zar­se para esto. También se re­co­mie­n­da proteger este perfil con una co­n­tra­se­ña, puesto que por defecto no hay ninguna. Para ello solo tienes que in­tro­du­cir el siguiente comando y la co­n­tra­se­ñ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 ad­mi­ni­s­tra­ción y que también debería pro­te­ge­r­se con una co­n­tra­se­ña segura. Para hacerlo, se escribe el siguiente comando (“co­n­tra­se­ña nueva” sustituye a la co­n­tra­se­ña que has elegido):

su - postgres
psql -d template1 -c "ALTER USER postgres WITH PASSWORD ''contraseña nueva';"

Para comprobar que la in­s­ta­la­ción se ejecutó co­rre­c­ta­me­n­te, puedes crear una base de datos de prueba (testdb) con la cuenta “postgres” y ad­mi­ni­s­trar­la 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 Po­s­t­gre­S­QL en Windows

Instalar Postgres en un ordenador Windows es muy fácil gracias al in­s­ta­la­dor ce­r­ti­fi­ca­do por En­te­r­pri­se­DB, que incluye el fa­bri­ca­n­te y que puede de­s­ca­r­gar­se gra­tui­ta­me­n­te en la página de la empresa. Para descargar al asistente para la in­s­ta­la­ción, que ofrece he­rra­mie­n­tas extra así como soporte comercial para Po­s­t­gre­S­QL, solo hay que se­le­c­cio­nar la versión pe­r­ti­ne­n­te del gestor de bases de datos y presionar “Download now”.

Una vez de­s­ca­r­ga­do, se inicia el asistente con doble clic, in­s­ta­lá­n­do­se en primer lugar el co­m­pi­la­dor de Microsoft Visual C++ (si no está ya co­n­fi­gu­ra­do en el sistema). A co­n­ti­nua­ción se se­le­c­cio­na el lugar para guardar Po­s­t­gre­S­QL y se excluyen los co­m­po­ne­n­tes que no sean ne­ce­sa­rios. Los más re­le­va­n­tes son el servidor Po­s­t­gre­S­QL y las he­rra­mie­n­tas de líneas de comando –el cliente gráfico pgAdmin o el Stack Builder (para descargas e in­s­ta­la­cio­nes simples de ex­te­n­sio­nes) no son es­tri­c­ta­me­n­te ne­ce­sa­rios, pero facilitan mucho el trabajo con el programa.

Si ya se indicó dónde se guardarán los datos, solo queda asignar una co­n­tra­se­ña al perfil de la cuenta de ad­mi­ni­s­tra­ción de la base de datos “postgres”. Los ajustes de puerto y lo­ca­li­za­ción pueden dejarse tal como están antes de iniciar la in­s­ta­la­ción en el último paso.

Tras la in­s­ta­la­ción, en la interfaz de usuario de pgAdmin (si se ha instalado) puede es­ta­ble­ce­r­se una conexión al servidor de Po­s­t­gre­S­QL. Se­le­c­cio­na para ello la versión instalada en la lista de se­r­vi­do­res pulsando el botón derecho del ratón y haz clic fi­na­l­me­n­te en “Connect server”.

Tras teclear la co­n­tra­se­ña para la cuenta admin “postgres”, el cliente inicia la conexión.

Ventajas e in­co­n­ve­nie­n­tes de Po­s­t­gre­S­QL

Ventajas In­co­n­ve­nie­n­tes
Open source No está di­s­po­ni­ble por defecto en todos los hosters
Altamente ampliable La do­cu­me­n­ta­ción es mejorable y está solo di­s­po­ni­ble 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 geo­grá­fi­cos)  
Búsqueda de texto completo flexible  
Pueden crearse funciones propias, triggers, tipos de datos, etc.  
Amplia co­m­pa­ti­bi­li­dad con varios lenguajes (Python, Java, Perl, PHP, C, C++, etc.)  
Soporta JSON  
Mu­l­ti­pla­ta­fo­r­ma  
Ir al menú principal