Ahorre 15% en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código: Skills Comenzar
Secciones
Administración Linux

Guía Completa de PostgreSQL: Instalación, Configuración y Características Principales

PostgreSQL es uno de los sistemas de gestión de bases de datos relacionales (RDBMS) de código abierto más potentes disponibles hoy en día. Reconocido por su estabilidad, extensibilidad y cumplimiento de los estándares SQL, es confiable para desarrolladores, ingenieros de datos y empresas en todo el mundo para gestionar grandes conjuntos de datos complejos con confianza. Ya sea que estés construyendo una aplicación web, un almacén de datos o un backend de microservicios, PostgreSQL ofrece el rendimiento y la confiabilidad que tu proyecto requiere.

Esta guía completa cubre todo lo que necesitas saber: qué es PostgreSQL, sus características destacadas, cómo instalarlo en Ubuntu y cómo realizar operaciones esenciales de bases de datos para comenzar rápidamente.

1. ¿Qué es PostgreSQL?

PostgreSQL — a menudo llamado "Postgres" — es un sistema de gestión de bases de datos objeto-relacional (ORDBMS) que extiende las capacidades de las bases de datos relacionales tradicionales. A diferencia de los motores SQL más simples, PostgreSQL admite tipos de datos avanzados (incluyendo JSON, arrays y hstore), lenguajes procedimentales y funciones definidas por el usuario, lo que lo hace adecuado para una amplia gama de casos de uso, desde aplicaciones web simples hasta cargas de trabajo analíticas complejas.

Lanzado por primera vez en 1996 y respaldado por una vibrante comunidad de código abierto, PostgreSQL se ha convertido en un motor de base de datos de nivel de producción que compite directamente con soluciones comerciales como Oracle y Microsoft SQL Server — sin costo de licencia.

¿Por qué elegir PostgreSQL sobre otras bases de datos?

CaracterísticaPostgreSQLMySQLSQLite
Cumplimiento ACID✅ Completo✅ Parcial✅ Limitado
Soporte JSON✅ Nativo✅ Básico
Tipos de datos personalizados✅ Sí❌ No❌ No
Búsqueda de texto completo✅ Integrada✅ Básica
Extensibilidad✅ Alta⚠️ Moderada❌ Baja
Concurrencia (MVCC)✅ Sí⚠️ Limitada❌ No

2. Características Clave de PostgreSQL

Entender qué hace que PostgreSQL sea excepcional te ayudará a aprovechar todo su potencial en tu infraestructura.

2.1. Tipos de Datos Avanzados

PostgreSQL soporta una gama notablemente amplia de tipos de datos nativos, mucho más allá de lo que ofrecen la mayoría de las bases de datos:

  • Tipos primitivos: INTEGER, NUMERIC, VARCHAR, BOOLEAN, DATE, TIMESTAMP
  • Tipos estructurados: Arrays, Tipos compuestos, Tipos de rango
  • Tipos de documento: JSON y JSONB (JSON binario para consultas más rápidas)
  • Tipos de red: INET, CIDR, MACADDR — ideales para aplicaciones relacionadas con redes
  • Tipos geométricos: POINT, LINE, POLYGON — útiles para aplicaciones GIS
  • UUID: Soporte nativo para identificadores universalmente únicos
  • Búsqueda de Texto Completo (FTS): Los tipos tsvector y tsquery integrados permiten búsqueda de texto completo potente y consciente del idioma sin herramientas externas

Esta versatilidad significa que puedes modelar prácticamente cualquier estructura de datos del mundo real directamente en la base de datos.

2.2. Extensibilidad

PostgreSQL está diseñado para ser extensible. Puedes personalizar y expandir su funcionalidad sin modificar el motor central:

  • Funciones Personalizadas y Procedimientos Almacenados: Escribe lógica de negocio directamente en la base de datos usando PL/pgSQL, PL/Perl, PL/Python, PL/Tcl, o incluso PL/V8 (JavaScript)
  • Operadores y Agregados Personalizados: Define tus propios operadores adaptados a tus tipos de datos
  • Extensiones: El ecosistema de extensiones de PostgreSQL es vasto. Las extensiones populares incluyen:
PostGIS — soporte avanzado de datos geoespaciales
pg_stat_statements — monitoreo del rendimiento de consultas
pgcrypto — funciones criptográficas
uuid-ossp — generación de UUID
TimescaleDB — optimización de datos de series temporales

2.3. Control de Concurrencia y Transacciones
PostgreSQL maneja el acceso concurrente elegantemente a través del Control de Concurrencia Multi-Versión (MVCC):

MVCC: En lugar de bloquear filas durante lecturas, PostgreSQL crea una instantánea de los datos para cada transacción. Esto permite que lectores y escritores operen simultáneamente sin bloquearse mutuamente, mejorando dramáticamente el rendimiento bajo alta concurrencia.
Cumplimiento ACID: Cada transacción en PostgreSQL es completamente compatible con ACID:
Atomicidad — las transacciones se completan totalmente o no se completan en absoluto
Consistencia — los datos siempre se mueven de un estado válido a otro
Aislamiento — las transacciones concurrentes no interfieren entre sí
Durabilidad — los datos confirmados sobreviven a los fallos del sistema a través del Registro de Escritura Anticipada (WAL)
Puntos de Guardado: Control de transacciones de grano fino dentro de un bloque de transacción único
Confirmación en Dos Fases (2PC): Soporta transacciones distribuidas en múltiples nodos de base de datos

2.4. Características de Seguridad
PostgreSQL incluye capacidades de seguridad de nivel empresarial:

Control de acceso basado en roles (RBAC) con gestión de privilegios granular
Seguridad a Nivel de Fila (RLS) — restringe el acceso a datos a nivel de fila por usuario
Encriptación SSL/TLS para conexiones en tránsito
Autenticación SCRAM-SHA-256 y MD5
pg_hba.conf — configuración flexible de autenticación basada en host

2.5. Alta Disponibilidad y Replicación

Replicación en Streaming: Replicación en tiempo real de primario a réplica
Replicación Lógica: Replica tablas específicas o publicaciones de forma selectiva
Recuperación a un Punto en el Tiempo (PITR): Restaura tu base de datos a cualquier momento específico usando archivos WAL
Soporte de Failover: Compatible con herramientas como Patroni, repmgr y pgBouncer para agrupación de conexiones

3. Instalación de PostgreSQL en Ubuntu
Esta sección te guía a través de una instalación completa y lista para producción de PostgreSQL en Ubuntu 22.04 LTS. Los mismos pasos se aplican a Ubuntu 20.04 con variaciones menores.
> Requisitos previos: Un servidor que ejecute Ubuntu 22.04 LTS con privilegios sudo. Si necesitas un entorno de servidor confiable, considera VPS Hosting de AlexHost — ideal para ejecutar cargas de trabajo de bases de datos con recursos garantizados y acceso root completo.
Paso 1: Actualizar el índice de paquetes
Siempre comienza actualizando tus listas de paquetes para asegurar que instales la versión más reciente disponible:
sudo apt update && sudo apt upgrade -y
Paso 2: Instalar PostgreSQL
Instala PostgreSQL junto con el paquete postgresql-contrib, que incluye utilidades y extensiones adicionales:
sudo apt install postgresql postgresql-contrib -y
Esto instala PostgreSQL 14 (o la versión más reciente disponible en tu repositorio de Ubuntu). Para instalar una versión específica (por ejemplo, PostgreSQL 16) desde el repositorio APT oficial de PostgreSQL, usa lo siguiente:
# Add the PostgreSQL APT repository
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the signing key
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg

# Update and install
sudo apt update
sudo apt install postgresql-16 -y
Paso 3: Iniciar y habilitar el servicio PostgreSQL
Después de la instalación, inicia el servicio y configúralo para que se lance automáticamente al arrancar el sistema:
sudo systemctl start postgresql
sudo systemctl enable postgresql
Paso 4: Verificar la instalación
Confirma que PostgreSQL se está ejecutando correctamente:
sudo systemctl status postgresql
Salida esperada:
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
     Active: active (running) since ...
También puedes verificar la versión instalada:
psql --version
# Output: psql (PostgreSQL) 16.x
Paso 5: Configurar PostgreSQL para acceso remoto (Opcional)
Por defecto, PostgreSQL solo escucha en localhost. Para permitir conexiones remotas (por ejemplo, desde tu servidor de aplicaciones), edita el archivo de configuración principal:
sudo nano /etc/postgresql/16/main/postgresql.conf
Encuentra y modifica esta línea:
listen_addresses = 'localhost'
Cámbiala a:
listen_addresses = '*'
Luego actualiza el archivo de autenticación basado en host:
sudo nano /etc/postgresql/16/main/pg_hba.conf
Añade la siguiente línea para permitir un rango de IP específico (reemplaza con tu rango de IP real):
host    all             all             192.168.1.0/24          scram-sha-256
Reinicia PostgreSQL para aplicar los cambios:
sudo systemctl restart postgresql
> Nota de seguridad: Siempre restringe el acceso remoto a direcciones IP conocidas y asegúrate de que tu firewall (UFW o iptables) esté configurado apropiadamente. Empareja tu servidor de base de datos con un Certificado SSL para encriptar todos los datos en tránsito.
4. Uso Básico de PostgreSQL
Ahora que PostgreSQL está instalado, veamos las operaciones esenciales que todo administrador y desarrollador necesita conocer.
Paso 1: Acceder al Shell de PostgreSQL
PostgreSQL crea un usuario del sistema predeterminado llamado postgres durante la instalación. Cambia a este usuario y abre el shell interactivo:
sudo -i -u postgres
psql
Deberías ver el prompt de PostgreSQL:
postgres=#
Alternativamente, puedes acceder al shell directamente sin cambiar de usuario:
sudo -u postgres psql
Paso 2: Crear una Base de Datos
Crea una nueva base de datos para tu aplicación:
CREATE DATABASE mydatabase;
Verifica que fue creada:
l
Esto lista todas las bases de datos en el servidor.
Paso 3: Crear un Usuario (Rol)
Crea un usuario de base de datos dedicado con una contraseña segura:
CREATE USER myuser WITH PASSWORD 'StrongP@ssw0rd!';
Buena práctica: evita usar el superusuario predeterminado postgres para conexiones de aplicaciones. Siempre crea un rol dedicado con privilegios mínimos.
Paso 4: Otorgar Privilegios
Otorga al nuevo usuario acceso completo a la base de datos:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
Para un control más granular, puedes otorgar privilegios específicos en esquemas y tablas individuales:
-- Connect to the database first
c mydatabase

-- Grant usage on the public schema
GRANT USAGE ON SCHEMA public TO myuser;

-- Grant privileges on all existing tables
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO myuser;

-- Ensure future tables are also accessible
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO myuser;
Paso 5: Conectar a la Base de Datos como el Nuevo Usuario
Sal de la sesión actual y reconecta como el nuevo usuario:
q
Luego conecta directamente:
psql -U myuser -d mydatabase -h localhost
Paso 6: Crear Tablas e Insertar Datos
Una vez conectado, crea tu primera tabla:
CREATE TABLE employees (
    id          SERIAL PRIMARY KEY,
    first_name  VARCHAR(50) NOT NULL,
    last_name   VARCHAR(50) NOT NULL,
    email       VARCHAR(100) UNIQUE NOT NULL,
    department  VARCHAR(50),
    salary      NUMERIC(10, 2),
    hired_at    TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Inserta algunos registros:
INSERT INTO employees (first_name, last_name, email, department, salary)
VALUES
    ('Alice', 'Johnson', 'alice@example.com', 'Engineering', 85000.00),
    ('Bob', 'Smith', 'bob@example.com', 'Marketing', 72000.00),
    ('Carol', 'Williams', 'carol@example.com', 'Engineering', 91000.00);
Consulta los datos:
SELECT first_name, last_name, department, salary
FROM employees
WHERE department = 'Engineering'
ORDER BY salary DESC;
Paso 7: Referencia de Comandos psql Esenciales




Comando
Descripción




l
Listar todas las bases de datos


c dbname
Conectar a una base de datos


dt
Listar todas las tablas en la base de datos actual


d tablename
Describir la estructura de la tabla


du
Listar todos los usuarios/roles


i file.sql
Ejecutar SQL desde un archivo


timing
Alternar la visualización del tiempo de ejecución de consultas


q
Salir de psql


?
Ayuda para comandos psql


h
Ayuda para comandos SQL




5. Elementos Esenciales de Optimización de Rendimiento de PostgreSQL
Una instalación predeterminada de PostgreSQL es conservadora en su uso de recursos. En entornos de producción, la optimización de la configuración mejora significativamente el rendimiento.
Parámetros Clave en postgresql.conf
sudo nano /etc/postgresql/16/main/postgresql.conf




Parámetro
Predeterminado
Recomendado (servidor 8GB RAM)




shared_buffers
128MB
2GB (25% de RAM)


effective_cache_size
4GB
6GB (75% de RAM)


work_mem
4MB
64MB


maintenance_work_mem
64MB
512MB


max_connections
100
200 (usar pgBouncer para más)


wal_buffers
-1 (auto)
64MB


checkpoint_completion_target
0.9
0.9




Aplica los cambios reiniciando el servicio:
sudo systemctl restart postgresql
Mejores Prácticas de Indexación
Los índices son críticos para el rendimiento de las consultas:
-- B-tree index (default, for equality and range queries)
CREATE INDEX idx_employees_department ON employees(department);

-- Partial index (index only a subset of rows)
CREATE INDEX idx_high_earners ON employees(salary) WHERE salary > 80000;

-- Composite index (for multi-column queries)
CREATE INDEX idx_dept_salary ON employees(department, salary DESC);

-- GIN index (for full-text search and JSONB)
CREATE INDEX idx_fts ON articles USING GIN(to_tsvector('english', content));
6. Copia de seguridad y recuperación
La protección de datos es innegociable. PostgreSQL proporciona herramientas robustas integradas para copia de seguridad y recuperación.
Copia de seguridad lógica con pg_dump
# Backup a single database
pg_dump -U postgres -d mydatabase -F c -f /backups/mydatabase_$(date +%Y%m%d).dump

# Backup all databases
pg_dumpall -U postgres > /backups/all_databases_$(date +%Y%m%d).sql
Restaurar desde copia de seguridad
# Restore a custom-format dump
pg_restore -U postgres -d mydatabase -F c /backups/mydatabase_20240101.dump

# Restore from SQL file
psql -U postgres -d mydatabase < /backups/all_databases_20240101.sql
Script de copia de seguridad automatizada
#!/bin/bash
BACKUP_DIR="/var/backups/postgresql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="mydatabase"

mkdir -p "$BACKUP_DIR"
pg_dump -U postgres -F c -d "$DB_NAME" -f "$BACKUP_DIR/${DB_NAME}_${DATE}.dump"

# Retain only the last 7 days of backups
find "$BACKUP_DIR" -name "*.dump" -mtime +7 -delete

echo "Backup completed: ${DB_NAME}_${DATE}.dump"
Añade esto a cron para copias de seguridad automatizadas diarias:
crontab -e
# Add: 0 2 * * * /usr/local/bin/pg_backup.sh >> /var/log/pg_backup.log 2>&1
7. Hosting PostgreSQL: Elegir la Infraestructura Correcta
El rendimiento y la confiabilidad de tu implementación de PostgreSQL dependen en gran medida de la infraestructura subyacente. Aquí hay las mejores opciones de hosting según tu carga de trabajo:
Para Desarrollo y Aplicaciones Pequeñas
Shared Web Hosting proporciona un punto de entrada asequible para proyectos pequeños. Sin embargo, para aplicaciones intensivas en bases de datos, se recomienda encarecidamente recursos dedicados.
Para Aplicaciones Web en Producción
Un plan de VPS Hosting te proporciona CPU y RAM dedicados, acceso root completo y la capacidad de ajustar los parámetros de configuración de PostgreSQL — esencial para el rendimiento de bases de datos de nivel producción. Los planes VPS de AlexHost están disponibles con almacenamiento NVMe SSD, que reduce drásticamente la latencia de I/O de PostgreSQL.
Si prefieres una experiencia de panel de control administrado, VPS con cPanel simplifica la gestión del servidor mientras aún te da acceso a tu instancia de PostgreSQL.
Para Cargas de Trabajo de Alto Tráfico y Empresariales
Dedicated Servers de AlexHost proporcionan el máximo rendimiento sin compartir recursos. Esta es la opción ideal para grandes implementaciones de PostgreSQL que manejan millones de transacciones por día, consultas analíticas complejas o configuraciones de replicación de alta disponibilidad.
Para Cargas de Trabajo de IA y Machine Learning
Si estás usando PostgreSQL junto con pipelines de machine learning (por ejemplo, con pgvector para búsqueda de similitud vectorial), GPU Hosting de AlexHost ofrece la potencia computacional necesaria para procesamiento de datos impulsado por IA.
8. Lista de verificación de endurecimiento de seguridad
Antes de implementar PostgreSQL en producción, revise esta lista de verificación de seguridad:

[ ] Cambiar la contraseña predeterminada de postgres: ALTER USER postgres WITH PASSWORD 'NewStrongPassword!';
  • [ ] Deshabilitar el acceso remoto para el superusuario en pg_hba.conf
  • [ ] Usar roles dedicados con privilegios mínimos para cada aplicación
  • [ ] Habilitar conexiones SSL en postgresql.conf: ssl = on
  • [ ] Configurar reglas de firewall para restringir el puerto 5432 solo a IPs conocidas
  • [ ] Habilitar Row-Level Security (RLS) para aplicaciones multi-tenant
  • [ ] Auditar regularmente los privilegios de usuario: du y dp
  • [ ] Mantener PostgreSQL actualizado para recibir parches de seguridad
  • [ ] Monitorear registros en /var/log/postgresql/ para actividad sospechosa
  • [ ] Implementar copias de seguridad automatizadas con almacenamiento fuera del sitio
  • Conclusión

    PostgreSQL es un sistema de gestión de bases de datos de clase mundial, de código abierto, que combina la confiabilidad del software empresarial con la flexibilidad de una plataforma abierta. Desde sus tipos de datos avanzados y su modelo de concurrencia MVCC hasta su rico ecosistema de extensiones y sus sólidas características de seguridad, PostgreSQL está diseñado para manejar los desafíos de gestión de datos más exigentes.

    Siguiendo esta guía, ha aprendido cómo:

    • Instalar y configurar PostgreSQL en Ubuntu
    • Crear bases de datos, usuarios y gestionar privilegios
    • Realizar operaciones CRUD esenciales
    • Optimizar el rendimiento para cargas de trabajo en producción
    • Implementar una estrategia sólida de copia de seguridad y recuperación
    • Asegurar su instancia de PostgreSQL contra amenazas comunes

    El siguiente paso es elegir la infraestructura adecuada para alojar su base de datos. Ya sea que necesite una solución de VPS Hosting rentable o un Servidor Dedicado de alto rendimiento para cargas de trabajo empresariales, AlexHost proporciona la infraestructura confiable y de alto rendimiento que su implementación de PostgreSQL se merece.