Todos los tipos de datos de columna comunes de PostgreSQL, agrupados por familia: números enteros, decimales, texto, tiempo, booleanos y UUID, JSON, direcciones de red, tipos compuestos y tipos de extensiones. Cada fila muestra qué almacena el tipo y cuándo elegirlo.
PostgreSQL tiene docenas de tipos, pero el diseño diario de esquemas usa un conjunto básico. Las decisiones recurrentes son: integer frente a numeric para números, varchar frente a text para cadenas (text suele bastar), timestamp frente a timestamptz (prefiere timestamptz para cualquier momento del mundo real) y json frente a jsonb (prefiere jsonb, es binario e indexable). Elige el tipo más específico que aún encaje; la base de datos lo aplica por ti.
Tabla de referencia · 46 entradas
Tipos de datos de PostgreSQLExplained
46 of 46 rows
Números enteros
Un entero de 2 bytes desde -32768 hasta 32767.
Raro; solo cuando debas ahorrar espacio.
Un entero de 4 bytes, alrededor de más o menos 2000 millones.
La columna entera por defecto.
Un entero de 8 bytes, alrededor de más o menos 9 trillones.
Contadores muy grandes o IDs externos.
Un entero de 4 bytes con autoincremento.
Claves autonumeradas heredadas; desde PG 10, GENERATED AS IDENTITY es el reemplazo recomendado.
Las variantes de 2 y 8 bytes de serial.
Autonumeración acorde a una columna smallint o bigint.
Un entero que la tabla genera por ti (GENERATED ALWAYS AS IDENTITY).
El serial moderno; estándar SQL y más seguro frente a inserciones manuales.
Decimales y coma flotante
Decimales exactos de precisión arbitraria.
Dinero y cualquier caso donde los errores de redondeo sean inaceptables.
Un float de simple precisión de 4 bytes.
Valores científicos aproximados donde la precisión no es crítica.
Un float de doble precisión de 8 bytes.
Geoespacial, estadística y valores de características de ML.
Un importe monetario con una configuración regional fija.
Rara vez; numeric con un código de moneda en la app es más portable.
Texto
Texto de longitud fija, relleno con espacios.
Códigos de ancho conocido; rara vez necesario.
Texto de longitud variable con un límite opcional.
Cadenas acotadas como nombres de usuario o correos.
Texto de longitud variable sin límite de longitud.
La columna de cadenas de uso general; no hay penalización de rendimiento frente a varchar.
Tiempo
Una fecha de calendario sin hora del día.
Cumpleaños y fechas de vencimiento.
Una hora del día, con o sin zona horaria.
Alarmas diarias u horarios de tienda.
Fecha y hora sin zona horaria.
Esquemas heredados; evítalo para trabajo nuevo.
Fecha y hora guardadas como UTC, mostradas en la zona del cliente.
La opción por defecto para cualquier momento del mundo real; prefírelo frente a timestamp.
Un lapso de tiempo, como 2 días o 3 horas.
Duraciones y aritmética de fechas.
Booleano, UUID y bytes
Verdadero o falso.
Banderas e interruptores.
Un identificador único universal de 128 bits.
IDs no secuenciales seguros de exponer (genera en la app o con gen_random_uuid).
Bytes binarios en crudo.
Blobs, imágenes y cargas opacas; para archivos grandes prefiere almacenamiento de objetos.
Cadenas de bits de longitud fija o variable.
Banderas empaquetadas y campos de protocolo; un único valor sí/no sigue siendo boolean.
JSON y semiestructurado
JSON analizado a una forma binaria e indexable.
Datos flexibles o anidados; la columna JSON recomendada (admite índices GIN).
JSON conservado como el texto original.
Raro; solo cuando debas preservar el orden de claves o los espacios exactos.
Texto XML.
Integraciones heredadas que exigen XML.
Una expresión de ruta compilada para navegar datos JSON.
Filtrar dentro de jsonb con jsonb_path_query y los operadores SQL/JSON.
Red y búsqueda
Una dirección de host IPv4 o IPv6.
Guardar IPs de clientes o servidores.
Un bloque de red IP, como 10.0.0.0/24.
Reglas de firewall y rangos de subred.
Una dirección MAC de 6 u 8 bytes (EUI-64).
Identificadores de dispositivos e interfaces de red.
Texto preprocesado para búsqueda de texto completo.
La búsqueda integrada de Postgres antes de recurrir a un buscador aparte.
Términos de búsqueda combinados con operadores AND, OR y de prefijo.
La mitad de consulta de la búsqueda de texto completo, emparejada contra un tsvector con @@.
Una posición del write-ahead log, el número de secuencia del log.
Retraso de replicación y monitorización de copias de seguridad.
Compuestos y avanzados
Un array de cualquier tipo base, p. ej. integer[].
Listas de valores simples; usa una tabla hija cuando los elementos necesiten sus propias columnas.
Un valor de una lista fija que tú defines.
Campos de estado con un conjunto estable de opciones.
Un tipo de fila propio de varios campos.
Grupos de campos repetidos compartidos entre tablas.
Un rango contiguo entre dos límites.
Horarios, franjas de precio y tramos de versiones, con operadores de solapamiento.
Un tipo base envuelto en restricciones que tú defines.
Reglas reutilizables como un correo no vacío, aplicadas en cada columna que lo use.
Una fila sin nombre de valores tipados.
Retornos de funciones PL/pgSQL y resultados intermedios de consultas.
Valores geométricos bidimensionales integrados.
Geometría plana simple; las ubicaciones reales necesitan PostGIS.
Un identificador de objeto del sistema de 4 bytes sin signo.
Unir catálogos del sistema; no para columnas de aplicación.
Una cadena interna de identificador de 63 caracteres.
Consultas de catálogo; text normal para todo lo visible al usuario.
Tipos de extensiones
Pares clave/valor de cadenas en un solo valor (extensión).
Mapas planos; jsonb lo cubre mejor hoy.
Una ruta jerárquica de etiquetas como news.tech.ai (extensión).
Árboles con consultas de ancestros y descendientes.
Texto que compara sin distinguir mayúsculas de minúsculas (extensión).
Unicidad insensible a mayúsculas como correos, sin índice lower().
Objetos geográficos y geométricos de la extensión PostGIS.
Consultas de distancia, contención e índice espacial.
Funciones de extensión que generan valores UUID.
Generación heredada; desde PG 13, gen_random_uuid() viene integrado.