Qué es PostgreSQL y cómo funciona

PostgreSQL es una base de datos relacional de código abierto que guarda los datos en tablas y los consulta con SQL. Garantiza transacciones ACID y también almacena JSON, arrays y datos geográficos.

Actualizado el 6 min de lectura

Objetivos de aprendizaje

Después de leer este artículo podrás:

  • Entender qué es PostgreSQL y cómo guarda y consulta datos
  • Conocer las transacciones ACID, JSONB, los índices y las extensiones
  • Saber cuándo PostgreSQL es la opción correcta y cuándo no
En esta página

Casi todo sistema termina guardando datos que se relacionan: usuarios, pedidos, productos, pagos. En lugar de esparcirlos en archivos, usas una base de datos que mantiene la información correcta incluso cuando varias personas escriben a la vez. PostgreSQL es una de las bases más usadas para ese trabajo.

Es popular entre desarrolladores porque hace bien lo básico (tablas, SQL, transacciones) y acompaña al proyecto cuando crece, con JSON, datos geográficos y extensiones.

AplicaciónPostgreSQLservidorWALregistra cada cambio antesusersidemailordersiduser_idtotalFK: clave foráneaINSERTSELECTfilas
Cada cambio pasa por el WAL antes de las tablas; la consulta une tablas por la clave foránea y devuelve filas.

¿Qué es PostgreSQL?#

PostgreSQL, también llamado Postgres, es un sistema de bases de datos relacionales (SGBD) de código abierto. Nació en 1986 como el proyecto POSTGRES en la Universidad de California, en Berkeley, y tiene décadas de desarrollo activo. Su licencia es la PostgreSQL License, permisiva y parecida a BSD y MIT.

Relacional significa que los datos viven en tablas, con filas y columnas, y que las tablas se enlazan mediante claves. Describes lo que quieres en SQL, el lenguaje estándar de consulta, y el servidor decide cómo obtenerlo.

¿Cómo funciona PostgreSQL?#

PostgreSQL se ejecuta como un servidor. Tu aplicación abre una conexión (puerto 5432 por defecto), envía comandos SQL y recibe filas. Tres ideas explican casi todo su comportamiento.

Esquema. Cada tabla tiene columnas con tipos definidos, y la base rechaza datos que rompen las reglas. Restricciones como NOT NULL, UNIQUE, clave primaria y clave foránea mantienen la integridad: no puede existir un pedido que apunte a un usuario inexistente.

Transacciones ACID. Una transacción agrupa varios comandos: o se aplican todos, o no se aplica ninguno. ACID significa atomicidad, consistencia, aislamiento y durabilidad. Si debitas una cuenta y acreditas otra, o valen los dos pasos o ninguno. PostgreSQL cumple ACID desde 2001.

MVCC y WAL. Con el control de concurrencia multiversión (MVCC), cada sentencia ve una versión consistente de los datos, así que quien lee no bloquea a quien escribe, y viceversa. El registro de escritura anticipada (WAL) anota cada cambio en un log antes de aplicarlo a las tablas. Gracias a él, la base se recupera tras una caída y la replicación funciona.

Ejemplo: dos tablas y una consulta#

sql
CREATE TABLE users (
  id    bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  email text NOT NULL UNIQUE
);

CREATE TABLE orders (
  id      bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  user_id bigint NOT NULL REFERENCES users (id),
  total   numeric(10, 2) NOT NULL
);

INSERT INTO users (email) VALUES ('ana@example.com');
INSERT INTO orders (user_id, total) VALUES (1, 49.90);

SELECT u.email, sum(o.total) AS gasto
FROM users u
JOIN orders o ON o.user_id = u.id
GROUP BY u.email;

REFERENCES impide un pedido sin usuario, y JOIN une las dos tablas en la consulta.

Ejemplo: usarlo desde Node.js#

Con el driver pg, el pool lee las variables PGHOST, PGUSER, PGPASSWORD, PGPORT y PGDATABASE, las mismas que usa psql. Nunca pongas la contraseña en el código. Si el servidor exige TLS con certificado de cliente, lee los archivos de certificado y pasa su contenido en la opción ssl.

js
import { readFileSync } from "node:fs";
import pg from "pg";

// host, usuario, contraseña, puerto y base vienen de las variables PG* del entorno
const pool = new pg.Pool({
  ssl: {
    ca: readFileSync("ca-certificate.crt", "utf8"), // CA en la que confía el cliente
    cert: readFileSync("certificate.pem", "utf8"), // certificado del cliente
    key: readFileSync("private-key.key", "utf8"), // clave privada del cliente
  },
});

const email = "ana@example.com";
const { rows } = await pool.query(
  "SELECT id, email FROM users WHERE email = $1",
  [email],
);
console.log(rows);

await pool.end();

$1 es un parámetro: el valor viaja separado del texto SQL, lo que evita la inyección SQL. Nunca armes la consulta concatenando cadenas.

¿Para qué sirve PostgreSQL?#

  • Aplicaciones web y APIs con usuarios, pedidos, permisos e informes.
  • Sistemas financieros y de inventario, donde una transacción a medias es inaceptable.
  • Bots que guardan configuraciones por servidor, economía, historial o moderación, sobre todo cuando los datos se relacionan.
  • Datos geográficos, con la extensión PostGIS.
  • Análisis con agregaciones y consultas complejas, sin salir de SQL.

¿Qué tiene de distinto PostgreSQL?#

JSONB. Los tipos json y jsonb guardan documentos dentro de una columna. La documentación recomienda jsonb en la mayoría de los casos: se procesa más rápido y admite índices GIN y el operador de contención @>.

sql
CREATE TABLE eventos (id bigserial PRIMARY KEY, datos jsonb NOT NULL);
CREATE INDEX eventos_datos_idx ON eventos USING GIN (datos);

SELECT id, datos ->> 'tipo' AS tipo
FROM eventos
WHERE datos @> '{"origen": "bot"}';

Varios tipos de índice. Además del B-tree por defecto, existen GiST, GIN y BRIN, cada uno para un tipo de dato y de consulta.

Extensiones. Añades funciones, tipos e índices sin cambiar de base. PostGIS, para datos geográficos, es el ejemplo más conocido.

Tipos ricos. Arrays, rangos, UUID, XML y tipos que defines tú mismo.

Replicación y recuperación. Replicación síncrona, asíncrona y lógica, y recuperación hasta un punto en el tiempo a partir del WAL.

¿Cuándo no usar PostgreSQL?#

  • Cachés y contadores muy calientes: un almacén en memoria como Redis responde más rápido en ese papel.
  • Archivos grandes: imágenes y vídeos van mejor en almacenamiento de objetos. Guarda en la base solo la ruta o la URL del archivo.
  • Proyectos diminutos y locales: si la app corre en una sola máquina con pocos datos, un archivo SQLite puede bastar.
  • Datos sin estructura fija y sin relaciones: una base de documentos como MongoDB puede ser más directa, aunque JSONB cubre mucho.

Para decidir entre opciones, lee qué base de datos elegir. Si la duda es entre las dos relacionales más comunes, mira PostgreSQL vs MySQL y qué es MySQL.

¿Cómo se versiona PostgreSQL?#

Sale una versión principal por año, y cada una recibe correcciones de errores y de seguridad durante 5 años. La tabla oficial de versiones muestra cuáles siguen con soporte. Las actualizaciones menores (de una x.5 a la x.6, por ejemplo) normalmente solo piden reiniciar el servidor con los nuevos binarios (lee antes las notas de la versión). Pasar a una versión principal nueva exige pg_upgrade o un dump y una restauración, así que planéalo antes de que una versión pierda soporte.

Sea cual sea la versión, conserva copias de tu base. La guía de cómo hacer un respaldo de tu base de datos explica el paso a paso.

Cómo hacerlo en Square Cloud#

Lo que este artículo mostró del núcleo de PostgreSQL (un esquema con claves foráneas, transacciones, JSONB con índice GIN y consultas parametrizadas) funciona en el hosting de PostgreSQL de Square Cloud, disponible desde el plan Standard; Hobby no incluye bases de datos. Es el PostgreSQL nativo, sin extensiones: PostGIS, pgvector y similares no están disponibles, así que revísalo antes si tu proyecto depende de alguna. Creas la base en el panel, siempre en una versión reciente, con al menos 1024 MB de la RAM del plan, y queda lista en segundos en el mismo datacenter que tus aplicaciones, con una latencia media de alrededor de 1 ms.

El ejemplo de Node.js ya sigue el formato de conexión exigido. TLS es obligatorio: descarga del panel los archivos ca-certificate.crt, certificate.pem y private-key.key y léelos en la opción ssl, porque el cliente debe confiar en la CA y presentar su propio certificado. Guarda los datos de la URL de conexión (host, puerto, usuario, contraseña y base) en las variables PG* de la aplicación y reiníciala para que surtan efecto. Para los contadores muy activos que PostgreSQL no debería cargar, un Redis puede correr al lado, en el mismo plan.

Puedes tomar snapshots manuales cuando quieras, por ejemplo antes de un cambio de esquema, y todo plan que incluye bases de datos hace también un snapshot automático diario, que se guarda 7 días. Un snapshot se restaura en la misma base, en otro PostgreSQL o en una base nueva, o se descarga como .zip.

Consulta detalles y planes en hosting de PostgreSQL.

Hosting de bases de datos

MongoDB, PostgreSQL, MySQL y Redis junto a tu app

Más información

Preguntas frecuentes

¿PostgreSQL es gratis?

El software es de código abierto bajo la PostgreSQL License, una licencia permisiva parecida a BSD y MIT: puedes usarlo, copiarlo y modificarlo sin pagar licencia. Ejecutar el servidor sí tiene costo de máquina, memoria y almacenamiento.

¿PostgreSQL y Postgres son lo mismo?

Sí. Postgres es el apodo de PostgreSQL. El nombre viene del proyecto POSTGRES, iniciado en 1986 en la Universidad de California, en Berkeley.

¿PostgreSQL es SQL o NoSQL?

Es una base de datos SQL (relacional). Pero el tipo JSONB permite guardar documentos JSON en una columna, con índices, lo que cubre parte de los casos que llevan a elegir una base NoSQL.

¿Qué versión de PostgreSQL debo usar?

Usa una versión con soporte, de preferencia la última estable. Cada versión principal recibe correcciones durante 5 años; consulta en la tabla oficial de versiones cuáles siguen con soporte.

Siguiente artículoQué base de datos elegir para tu proyectoPara la mayoría de proyectos, PostgreSQL o MySQL bastan. Mira cuándo usar MongoDB, Redis o SQLite, con criterios claros y una recomendación por escenario.

Más en Bases de datos

Ver los 24 artículos