🧠 ¿Qué son los tipos de datos?
Un tipo de dato define qué tipo de información puede almacenarse en una columna de una tabla.
👉 Es una regla que garantiza que los datos tengan el formato correcto.
Ejemplo:
CREATE TABLE usuarios (
id INTEGER,
nombre VARCHAR(100),
activo BOOLEAN
);
INTEGER → solo números enteros
VARCHAR(100) → texto
BOOLEAN → verdadero/falso
📦 ¿Por qué son importantes?
Elegir correctamente los tipos de datos:
✅ Mejora el rendimiento
✅ Ahorra espacio
✅ Evita errores
✅ Facilita validaciones
👉 Un mal diseño puede afectar seriamente tu aplicación.
🔢 Tipos numéricos
🔹 Enteros
✅ Ejemplo:
CREATE TABLE productos (
id SERIAL PRIMARY KEY,
stock INTEGER
);
🔹 Decimales
✅ Ejemplo:
precio NUMERIC(10,2)
👉 Perfecto para dinero (evitar float).
🔤 Tipos de texto
✅ Ejemplo:
nombre VARCHAR(100),
descripcion TEXT
💡 Recomendación:
Usa TEXT en la mayoría de casos (PostgreSQL lo maneja muy bien)
📅 Tipos de fecha y tiempo
✅ Ejemplo:
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
👉 Muy usados para auditoría.
✅ Tipo booleano
activo BOOLEAN
Valores posibles:
TRUE
FALSE
NULL
✅ Ejemplo:
SELECT * FROM usuarios WHERE activo = TRUE;
🔑 Tipos auto-incrementales
PostgreSQL tiene formas modernas de generar IDs automáticamente.
🔹 SERIAL (clásico)
id SERIAL PRIMARY KEY
🔹 IDENTITY (recomendado moderno)
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY
👉 Mejor práctica en versiones recientes.
🧩 Tipos JSON
PostgreSQL soporta datos tipo NoSQL:
✅ Ejemplo:
config JSONB
Insert:
INSERT INTO settings (config)
VALUES ('{"tema": "oscuro", "idioma": "es"}');
👉 JSONB es el más usado.
📚 Arrays
PostgreSQL permite arrays directamente:
tags TEXT[]
✅ Ejemplo:
INSERT INTO posts (tags)
VALUES (ARRAY['postgres', 'sql', 'tutorial']);
🌍 UUID
Para identificadores únicos globales:
id UUID
✅ Ejemplo:
id UUID DEFAULT gen_random_uuid()
👉 Muy usado en microservicios.
📍 Tipos especiales interesantes
🔹 ENUM
Permite valores definidos:
CREATE TYPE estado AS ENUM ('pendiente', 'enviado', 'entregado');
CREATE TABLE pedidos (
id SERIAL,
estado estado
);
🔹 BYTEA
Para almacenar binarios:
archivo BYTEA
⚖️ ¿Cómo elegir el tipo adecuado?
✅ Reglas prácticas
Números → INTEGER o BIGINT
Dinero → NUMERIC(10,2)
Texto → TEXT o VARCHAR
Fechas → TIMESTAMP
JSON → JSONB
IDs → IDENTITY o UUID
🚫 Errores comunes
❌ Usar VARCHAR en todo
precio VARCHAR(50) -- mala práctica
✅ Mejor:
precio NUMERIC(10,2)
``
❌ Usar FLOAT para dinero
Puede generar errores de precisión.
❌ Sobredimensionar campos
VARCHAR(1000) para nombre
🧪 Ejemplo completo
CREATE TABLE usuarios (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nombre VARCHAR(100),
email TEXT,
edad INTEGER,
activo BOOLEAN DEFAULT TRUE,
saldo NUMERIC(10,2),
preferencias JSONB,
creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
💡 Buenas prácticas
Prefiere TEXT sobre VARCHAR cuando no necesitas límite
Usa NUMERIC para valores financieros
Usa TIMESTAMPTZ si trabajas con diferentes zonas horarias
Evita tipos innecesariamente grandes
Usa JSONB en lugar de JSON
Prefiere IDENTITY en lugar de SERIAL
✅ Conclusión
Los tipos de datos son la base de un buen diseño en PostgreSQL. Elegirlos correctamente no solo mejora el rendimiento, sino que también garantiza la integridad y escalabilidad de tu sistema.