viernes, 26 de junio de 2026

馃悩 Tipos de Datos en PostgreSQL

馃 ¿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

Tipo

Descripci贸n

SMALLINT

Enteros peque帽os

INTEGER

Enteros comunes

BIGINT

Enteros grandes

✅ Ejemplo:

CREATE TABLE productos (

id SERIAL PRIMARY KEY,

stock INTEGER

);


馃敼 Decimales

Tipo

Uso

NUMERIC

Precisi贸n exacta

DECIMAL

Similar a NUMERIC

REAL

Punto flotante

DOUBLE PRECISION

Mayor precisi贸n flotante

✅ Ejemplo:

precio NUMERIC(10,2)

馃憠 Perfecto para dinero (evitar float).


馃敜 Tipos de texto

Tipo

Descripci贸n

CHAR(n)

Longitud fija

VARCHAR(n)

Longitud variable con l铆mite

TEXT

Longitud ilimitada

✅ 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

Tipo

Descripci贸n

DATE

Fecha

TIME

Hora

TIMESTAMP

Fecha y hora

TIMESTAMPTZ

Fecha y hora con zona horaria

✅ 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:

Tipo

Descripci贸n

JSON

Texto JSON

JSONB

JSON binario (m谩s eficiente)

✅ 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.


馃悩 Esquemas en PostgreSQL: qu茅 son y c贸mo usarlos

馃 ¿Qu茅 es un esquema?

Un esquema (schema) en PostgreSQL es una forma de organizar y agrupar objetos dentro de una base de datos.

馃憠 Es como una carpeta dentro de una base de datos.

Dentro de un esquema puedes tener:

  • Tablas

  • Vistas

  • Funciones

  • 脥ndices

  • Secuencias


馃幆 Ejemplo conceptual

Imagina una base de datos llamada:

empresa_db


Dentro puedes tener esquemas como:

  • ventas

  • recursos_humanos

  • finanzas

Y dentro de cada esquema sus propias tablas:

empresa_db

  ├── ventas.clientes

  ├── ventas.pedidos

  ├── recursos_humanos.empleados

  ├── finanzas.facturas



馃摝 ¿Para qu茅 se usan los esquemas?

Los esquemas sirven principalmente para:

1. 馃梻️ Organizar objetos

Separar l贸gica y funcionalidad dentro de la misma base de datos.

Ejemplo:

  • Esquema auth → usuarios y permisos

  • Esquema app → l贸gica de la aplicaci贸n

  • Esquema reporting → reportes


2. 馃敀 Controlar accesos

Puedes dar permisos por esquema en lugar de tabla por tabla.

GRANT USAGE ON SCHEMA ventas TO usuario_app;


3. 馃毇 Evitar conflictos de nombres

Puedes tener tablas con el mismo nombre en distintos esquemas.

ventas.clientes

soporte.clientes


4. 馃彈️ Soporte para m煤ltiples aplicaciones

Una sola base de datos puede contener varios sistemas organizados por esquema.


馃З Esquemas por defecto

Cuando creas una base de datos en PostgreSQL, ya existen esquemas:

馃敼 public

  • Es el esquema por defecto

  • Si no especificas esquema, los objetos se crean aqu铆

CREATE TABLE clientes (...);

-- equivale a

CREATE TABLE public.clientes (...);


馃敼 Otros esquemas internos

  • pg_catalog → funciones y metadatos internos

  • information_schema → vistas est谩ndar del sistema


馃洜️ Crear un esquema

馃敼 Sintaxis b谩sica

CREATE SCHEMA nombre_schema;

✅ Ejemplo:

CREATE SCHEMA ventas;


馃敼 Crear con propietario

CREATE SCHEMA ventas AUTHORIZATION postgres;


馃П Crear objetos dentro de un esquema

馃敼 Crear una tabla en un esquema espec铆fico

CREATE TABLE ventas.clientes (

id SERIAL PRIMARY KEY,

nombre VARCHAR(100),

email VARCHAR(100)

);


馃敼 Insertar datos

INSERT INTO ventas.clientes (nombre, email)

VALUES ('Juan P茅rez', 'juan@email.com');


馃敼 Consultar datos

SELECT * FROM ventas.clientes;


馃攧 Cambiar el esquema por defecto (search_path)

PostgreSQL usa una variable llamada search_path que define en qu茅 esquemas buscar.

馃敼 Ver configuraci贸n

SHOW search_path;


馃敼 Cambiar esquema por defecto

SET search_path TO ventas;

Ahora puedes hacer:

SELECT * FROM clientes;

(en lugar de ventas.clientes)


馃棏️ Eliminar un esquema

DROP SCHEMA nombre_schema;

⚠️ Ejemplo:

DROP SCHEMA ventas;


馃敼 Eliminar con todo su contenido

DROP SCHEMA ventas CASCADE;

馃毃 Esto elimina:

  • Tablas

  • Vistas

  • Funciones


馃攼 Permisos en esquemas

馃敼 Dar acceso

GRANT USAGE ON SCHEMA ventas TO usuario_app;

``

馃敼 Permitir crear objetos

GRANT CREATE ON SCHEMA ventas TO usuario_app;


⚖️ Esquemas vs Bases de Datos

Caracter铆stica

Base de Datos

Esquema

Nivel

Alto

Intermedio

Contiene

Todo

Objetos espec铆ficos

Aislamiento

Total

Parcial

Conexi贸n

Requiere reconexi贸n

No

馃憠 Resumen:

  • Base de datos = contenedor principal

  • Esquema = organizaci贸n interna


馃挕 Buenas pr谩cticas

✅ 1. No usar solo public

Define esquemas propios para organizar mejor.


✅ 2. Nombres claros

ventas

auth

reportes


✅ 3. Separar por dominio

  • core → l贸gica principal

  • audit → auditor铆a

  • api → capa de exposici贸n


✅ 4. Evitar mezclar todo

❌ Mala pr谩ctica:

public (todo aqu铆)


✅ Buena pr谩ctica:

app.usuarios

app.productos

audit.logs



✅ 5. Controlar permisos por esquema

M谩s simple y seguro que hacerlo por tabla.


馃殌 Caso pr谩ctico simple

-- Crear esquema

CREATE SCHEMA ecommerce;


-- Crear tabla

CREATE TABLE ecommerce.productos (

id SERIAL PRIMARY KEY,

nombre VARCHAR(100),

precio NUMERIC(10,2)

);


-- Insertar datos

INSERT INTO ecommerce.productos (nombre, precio)

VALUES ('Laptop', 15000.00);


-- Consultar

SELECT * FROM ecommerce.productos;


✅ Conclusi贸n

Los esquemas son una herramienta clave en PostgreSQL para:

  • Organizar la base de datos

  • Mejorar la seguridad

  • Escalar proyectos

  • Mantener orden en sistemas grandes

Si usas correctamente los esquemas desde el inicio, tu base de datos ser谩 mucho m谩s mantenible y profesional.


馃悩 Tipos de Datos en PostgreSQL