Hoy vamos a hablar sobre los tipos de datos numéricos en PostgreSQL. Si alguna vez te has preguntado cómo guardar el número "42", cálculos financieros o, tal vez, milisegundos, — este es tu sitio. Vamos a ver qué tipo es el mejor para cada tarea, para que tú y tus datos estéis a gusto.
Los tipos de datos numéricos en PostgreSQL se dividen en tres grupos principales:
- Números enteros (
INTEGER): para guardar números sin parte decimal. Son los típicos números como 1, 42, -7. - Números exactos (
NUMERIC): para guardar números con una cantidad fija de decimales. Muy útil para cálculos financieros, donde la precisión es más importante que la vida misma. - Números de coma flotante (
REAL): para guardar números que pueden ser muy grandes o increíblemente pequeños. Son menos precisos queNUMERIC, pero perfectos para cálculos científicos.
Tipo INTEGER
INTEGER es el tipo de datos para números enteros. Ideal cuando necesitas guardar números sin decimales. PostgreSQL ofrece tres variantes de INTEGER para cubrir diferentes rangos:
SMALLINT: tipo entero pequeño. Rango: de -32,768 a 32,767.INTEGER(oINT): tipo entero estándar. Rango: de -2,147,483,648 a 2,147,483,647.BIGINT: para números grandes. Rango: de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807.
Imagina que tenemos una tabla students donde guardamos info sobre los estudiantes: su nombre, edad y cantidad de créditos (puntos académicos):
| id | name | age | credits |
|---|---|---|---|
| 1 | Otto Nate | 21 | 30 |
| 2 | Maria Chi | 22 | 45 |
| 3 | Peter Val | 20 | 60 |
| 4 | Anna Song | 23 | 50 |
| 5 | Sophie Zhang | 21 | 35 |
Ahora hacemos una consulta SQL sencilla para sacar la lista de estudiantes con su edad y créditos:
SELECT name, age, credits
FROM students;
Resultado:
| name | age | credits |
|---|---|---|
| Otto Nate | 21 | 30 |
| Maria Chi | 22 | 45 |
| Peter Val | 20 | 60 |
| Anna Song | 23 | 50 |
| Sophie Zhang | 21 | 35 |
¿Cuándo usar INTEGER?
- Guardar identificadores (
id, número de pedido). - Guardar cantidades de algo (por ejemplo, cantidad de productos en stock, cantidad de estudiantes).
Tipo NUMERIC
NUMERIC es el tipo de datos para números exactos con coma fija. Si necesitas guardar algo como 123.456, y un error en un decimal te puede costar la reputación (o el dinero), usa NUMERIC.
Formato de declaración: NUMERIC(precision, scale), donde:
precision— cantidad total de dígitos (incluyendo los antes y después de la coma).scale— cantidad de dígitos después de la coma.
Por ejemplo, NUMERIC(6, 2) te deja guardar números con máximo 6 dígitos y 2 de ellos después de la coma.
Vamos a crear una tabla para registrar transacciones financieras:
| id | description | amount |
|---|---|---|
| 1 | Pago por estudios | 2345.67 |
| 2 | Beca mensual | 500.00 |
| 3 | Cuota de laboratorio | 145.99 |
| 4 | Multa de biblioteca | 12.75 |
| 5 | Registro en conferencia | 320.50 |
Ahora sacamos la lista de transacciones:
SELECT description, amount
FROM transactions;
Resultado:
| description | amount |
|---|---|
| Pago por estudios | 2345.67 |
| Beca mensual | 500.00 |
| Cuota de laboratorio | 145.99 |
| Multa de biblioteca | 12.75 |
| Registro en conferencia | 320.50 |
¿Cuándo usar NUMERIC?
- Cálculos financieros (precio de productos, sueldos).
- Guardar medidas exactas (peso, longitud).
Tabla measurements
| id | mass - REAL | height - REAL |
|---|---|---|
| 1 | 70.5 | 1.83 |
| 2 | 64.2 | 1.75 |
| 3 | 82.3 | 1.92 |
| 4 | 55.0 | 1.60 |
Ahora mostramos los valores:
SELECT mass, height
FROM measurements;
Resultado:
| mass | height |
|---|---|
| 70.5 | 1.83 |
| 64.2 | 1.75 |
| 82.3 | 1.92 |
| 55.0 | 1.60 |
¿Cuándo usar REAL?
- Cálculos científicos (masa de átomos, distancia a la Luna).
- Modelado de datos donde se permiten errores pequeños.
Comparación de tipos numéricos: ¿cuándo usar cada uno?
| Tipo de dato | Rango | Precisión | Ejemplos de uso |
|---|---|---|---|
SMALLINT |
-32,768 a 32,767 | Números enteros | Números pequeños (edad, puntuaciones). |
INTEGER |
-2,147,483,648 a 2,147,483,647 | Números enteros | Identificadores, cantidades. |
BIGINT |
-9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 | Números enteros | Números muy grandes. |
NUMERIC |
Depende de precision y scale |
Números decimales exactos | Finanzas, medidas. |
REAL |
Aproximadamente 6 decimales | Punto flotante | Datos aproximados o científicos. |
DOUBLE PRECISION |
Aproximadamente 15 decimales | Punto flotante de alta precisión | Ciencia, investigación. |
Alias
En PostgreSQL muchos tipos numéricos tienen alias (sinónimos): son nombres alternativos de tipos que funcionan igual, pero mejoran la legibilidad o la compatibilidad con otros SGBD.
Aquí tienes una guía rápida y clara de los alias de tipos numéricos en PostgreSQL:
Alias para tipos enteros
| Alias | Tipo real | Tamaño | Rango |
|---|---|---|---|
INT |
INTEGER |
4 bytes | −2,147,483,648 a 2,147,483,647 |
INT4 |
INTEGER |
4 bytes | (alias obsoleto) |
SMALLINT |
SMALLINT |
2 bytes | −32,768 a 32,767 |
INT2 |
SMALLINT |
2 bytes | |
BIGINT |
BIGINT |
8 bytes | −9 quintillones a +9 quintillones |
INT8 |
BIGINT |
8 bytes |
Alias para números exactos
| Alias | Tipo real | Propósito |
|---|---|---|
DEC |
NUMERIC |
Sinónimo según el estándar SQL |
DECIMAL |
NUMERIC |
Lo mismo |
Alias para números de coma flotante
| Alias | Tipo real | Precisión |
|---|---|---|
FLOAT |
DOUBLE PRECISION |
~15 dígitos (por defecto) |
FLOAT(24) |
REAL |
~6 dígitos |
FLOAT(53) |
DOUBLE PRECISION |
~15 dígitos |
FLOAT8 |
DOUBLE PRECISION |
Alias obsoleto |
FLOAT4 |
REAL |
Alias obsoleto |
Errores típicos
Al trabajar con tipos numéricos, puedes encontrarte con varias trampas:
Elegir un tipo de dato demasiado pequeño. Si usas SMALLINT para la edad de las personas, te equivocas. Al robot de "Matrix", que tiene millones de años, le va a molestar.
Pérdida de datos por redondeo. Si usas REAL en cálculos financieros, puedes perder céntimos. Y luego la confianza de los clientes.
Comparar diferentes tipos. Si comparas INTEGER y REAL, puedes tener resultados raros por cómo se representan los números de coma flotante.
GO TO FULL VERSION