viernes, 17 de julio de 2026

馃悩 La Restricci贸n DEFAULT en PostgreSQL

 En el cap铆tulo anterior vimos c贸mo utilizar NULL y NOT NULL para controlar si una columna puede o no quedar sin informaci贸n.

Sin embargo, existe una situaci贸n muy com煤n:

¿Qu茅 ocurre cuando no quiero que el usuario capture un valor, pero tampoco quiero almacenar NULL?

Para estos casos PostgreSQL proporciona la restricci贸n DEFAULT.


馃 ¿Qu茅 es DEFAULT?

DEFAULT permite asignar un valor predeterminado a una columna cuando el usuario no proporciona uno durante un INSERT.

En otras palabras:

Si no se especifica un valor, PostgreSQL utilizar谩 autom谩ticamente el valor definido en DEFAULT.


馃彈️ Sintaxis

La cl谩usula DEFAULT se define durante la creaci贸n de la tabla.

CREATE TABLE tabla (
columna tipo_dato DEFAULT valor
);

Ejemplo:

CREATE TABLE empleados (
id INTEGER,
nombre VARCHAR(100),
activo BOOLEAN DEFAULT TRUE
);

En este caso:

  • Si se proporciona un valor para activo, PostgreSQL lo utilizar谩.
  • Si no se proporciona, PostgreSQL asignar谩 TRUE.

✅ Primer Ejemplo

Crear la tabla

CREATE TABLE empleados (
id INTEGER,
nombre VARCHAR(100),
activo BOOLEAN DEFAULT TRUE
);


Insertar un registro sin especificar el campo activo

INSERT INTO empleados (
id,
nombre
)
VALUES (
1,
'Juan P茅rez'
);

Observa que no enviamos ning煤n valor para activo.


Consultar los datos

SELECT *
FROM empleados;

Resultado:

id | nombre | activo
----+--------------+--------
1 | Juan P茅rez | true

PostgreSQL asign贸 autom谩ticamente el valor definido en DEFAULT.


✏️ Insertar un valor diferente al DEFAULT

El valor predeterminado no es obligatorio.

Si especificamos un valor durante el INSERT, PostgreSQL utilizar谩 ese valor.

INSERT INTO empleados (
id,
nombre,
activo
)
VALUES (
2,
'Ana L贸pez',
FALSE
);

Consultar:

SELECT *
FROM empleados;

Resultado:

id | nombre | activo
----+--------------+--------
1 | Juan P茅rez | true
2 | Ana L贸pez | false


馃搮 DEFAULT con fechas

Uno de los usos m谩s frecuentes es almacenar autom谩ticamente fechas de creaci贸n.

Crear tabla

CREATE TABLE productos (
codigo INTEGER,
nombre VARCHAR(100),
fecha_creacion DATE DEFAULT CURRENT_DATE
);


Insertar registro

INSERT INTO productos (
codigo,
nombre
)
VALUES (
1001,
'Laptop'
);


Consultar

SELECT *
FROM productos;

Resultado:

codigo | nombre | fecha_creacion
--------+--------+---------------
1001 | Laptop | 2026-07-17

PostgreSQL asign贸 autom谩ticamente la fecha actual.


馃晵 DEFAULT con Timestamp

Tambi茅n es muy com煤n registrar autom谩ticamente la fecha y hora de creaci贸n.

CREATE TABLE logs (
id INTEGER,
mensaje TEXT,
fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Insertar:

INSERT INTO logs (
id,
mensaje
)
VALUES (
1,
'Aplicaci贸n iniciada'
);

Consultar:

SELECT *
FROM logs;

Resultado:

id | mensaje | fecha_registro
----+----------------------+-------------------------
1 | Aplicaci贸n iniciada | 2026-07-17 15:32:10


馃敘 DEFAULT para n煤meros

Tambi茅n podemos definir valores num茅ricos predeterminados.

CREATE TABLE productos (
codigo INTEGER,
nombre VARCHAR(100),
stock INTEGER DEFAULT 0
);

Insertar:

INSERT INTO productos (
codigo,
nombre
)
VALUES (
1001,
'Mouse'
);

Resultado:

codigo | nombre | stock
--------+--------+-------
1001 | Mouse | 0


馃摑 DEFAULT para texto

CREATE TABLE tickets (
id INTEGER,
descripcion TEXT,
estado VARCHAR(20) DEFAULT 'ABIERTO'
);

Insertar:

INSERT INTO tickets (
id,
descripcion
)
VALUES (
1,
'Error de acceso al sistema'
);

Consultar:

SELECT *
FROM tickets;

Resultado:

id | descripcion | estado
----+-----------------------------+---------
1 | Error de acceso al sistema | ABIERTO


⚠️ Diferencia entre NULL y DEFAULT

Es importante entender esta diferencia.

Supongamos la siguiente tabla:

CREATE TABLE usuarios (
id INTEGER,
activo BOOLEAN DEFAULT TRUE
);


Caso 1: No enviar el valor

INSERT INTO usuarios (id)
VALUES (1);

Resultado:

activo = TRUE

Se utiliza el valor definido en DEFAULT.


Caso 2: Insertar NULL expl铆citamente

INSERT INTO usuarios (
id,
activo
)
VALUES (
2,
NULL
);

Resultado:

activo = NULL

En este caso PostgreSQL no utiliza el valor por defecto porque el usuario proporcion贸 expl铆citamente un valor: NULL.


馃敀 Combinando NOT NULL y DEFAULT

Es muy com煤n utilizar ambas restricciones juntas.

CREATE TABLE usuarios (
id INTEGER,
nombre VARCHAR(100) NOT NULL,
activo BOOLEAN NOT NULL DEFAULT TRUE
);

Beneficios:

  • No se permiten valores nulos.
  • Si el usuario no env铆a un valor, PostgreSQL utiliza el valor predeterminado.

Ejemplo:

INSERT INTO usuarios (
id,
nombre
)
VALUES (
1,
'Juan P茅rez'
);

Resultado:

activo = TRUE


馃敡 Agregar DEFAULT a una columna existente

Supongamos que la tabla ya existe.

ALTER TABLE empleados
ALTER COLUMN activo SET DEFAULT TRUE;

A partir de ese momento, los nuevos registros utilizar谩n ese valor predeterminado.


馃敡 Eliminar DEFAULT

Si ya no deseas un valor por defecto:

ALTER TABLE empleados
ALTER COLUMN activo DROP DEFAULT;


馃И Ejemplo Completo

Crear tabla

CREATE TABLE clientes (
id INTEGER,
nombre VARCHAR(100) NOT NULL,
activo BOOLEAN DEFAULT TRUE,
fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
pais VARCHAR(50) DEFAULT 'M茅xico'
);


Insertar registros

INSERT INTO clientes (
id,
nombre
)
VALUES
(
1,
'Juan P茅rez'
),
(
2,
'Ana L贸pez'
);


Consultar

SELECT *
FROM clientes;

Resultado aproximado:

id | nombre | activo | fecha_registro | pais
----+-------------+--------+----------------------+--------
1 | Juan P茅rez | true | 2026-07-17 15:00:00 | M茅xico
2 | Ana L贸pez | true | 2026-07-17 15:00:05 | M茅xico

Observa c贸mo PostgreSQL asign贸 autom谩ticamente los valores de las columnas que no fueron proporcionadas.


馃挕 Buenas pr谩cticas

Utiliza DEFAULT para valores frecuentes

Por ejemplo:

activo BOOLEAN DEFAULT TRUE


Automatiza fechas de creaci贸n

fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP


Combina DEFAULT con NOT NULL

Esto evita valores nulos y simplifica los INSERT.

estado VARCHAR(20) NOT NULL DEFAULT 'ACTIVO'


Evita valores por defecto que puedan generar confusi贸n

Por ejemplo:

salario NUMERIC(10,2) DEFAULT 0

En algunos sistemas podr铆a ser dif铆cil distinguir entre:

  • Salario realmente igual a 0
  • Salario a煤n no capturado

Analiza cada caso de negocio antes de definir el valor predeterminado.


✅ Conclusi贸n

La restricci贸n DEFAULT permite que PostgreSQL asigne autom谩ticamente valores cuando una columna no es incluida en un INSERT.

Los conceptos m谩s importantes son:

  • DEFAULT define un valor predeterminado.
  • Solo se utiliza cuando la columna no recibe un valor durante el INSERT.
  • Puede utilizarse con n煤meros, texto, fechas, timestamps y valores booleanos.
  • Es com煤n combinarlo con NOT NULL.
  • Ayuda a simplificar las inserciones y mantener la consistencia de los datos.

No hay comentarios:

Publicar un comentario