En el siguiente articulo vamos detallar todos los tipos de datos que tiene disponible PostgreSQL. En la mayoría de casos son idénticos a cualquier otra base de datos relacional cómo SQL Server o Oracle, pero otros son muy particulares. Aprenderte los tipos de datos disponibles te ayudará a crear las tablas correctamente y a crear sentencias más optimas.
Tipos de datos en PostgreSQL
Tipos Lógicos
Disponemos del tipo lógico llamado boolean o también conocido como bool. En el solo se puede almacenar los valores true o false.
create table TipoDatos (
EnActivo boolean
);
insert into TipoDatos
values ('yes'), ('1'), ('y'), ('t');
Lenguaje del código: JavaScript (javascript)
Cuando insertas ciertos valores en una columna boolena, PostgreSQL lo convierte automáticamente:
- Los valores 1, yes, y, t y true son convertidos a true.
- Los valores 0, no, n, f y false son convertidos a false.
Tipos Numéricos
Disponemos de varios tipos de datos numéricos, por ejemplo en lo que respecta a números enteros tenemos smallint, int y bigint.
Si queremos almacenar números con decimales tendremos que crear campos de tipo real o double precisión. Estos tipos de datos se consideran de punto flotante y tienen la peculiaridad que pierden exactitud según van creciendo o decreciendo los valores, algo sin importancia en la mayoría de casos.
Para evitar esta perdida, también puedes utilizar el tipo de dato numeric, pero debes tener en cuenta que este tipo ocupa más espacio y las operaciones se ejecutan más lentas sobre ellos. En este tipo de dato le puedes asignar una precisión y una escala, pero si lo obvias podrás almacenar cualquier número. Recuerda que si creas un numeric(5,3) le estas indicando que el número va tener en total 5 numeros siendo 3 de ellos decimales. No pensar cómo es habitual que tendrá 5 enteros y 3 decimales.
Tipo de Dato | Tamaño | Nombre alternativo |
---|---|---|
smallint | 2 bytes | int2 |
int | 4 bytes | int4, integer |
bigint | 8 bytes | int8 |
numeric (p, e) | 11 + (p/2) | – |
real | 4 bytes | float, float4 |
double precision | 8 bytes | float8 |
create table TipoDatos (
numero1 smallint,
numero2 int,
numero3 bigint,
numero4 numeric(5,3),
numero5 real,
numero6 double precision
);
Tipo Auto numérico
Este tipo especial de PostgreSQL es bastante útil para crear valores incrementales. Al definir este tipo de datos conseguirás que su valor se vaya incrementando según se van insertando registros sin necesidad de indicarle nada. Cuando se inserten valores en esta tabla no debemos indicarle el valor de identificador ya que obtendrá el máxima valor del campo y le sumara uno.
create table TipoDatos (
Identificador serial,
Nombre varchar(10)
);
Este tipo de datos lleva implícita la creación de una secuencia que será la encargada de conseguir este funcionamiento. Puedes obtener más información leyendo este otro articulo.
Tipo de caracteres
Tenemos disponibles tres tipos de datos de cadena; char(n), varchar(n) y text.
- Char(n): reserva n espacios para almacenar la cadena independientemente del valor que insertes.
- Varchar(n): solo utiliza los espacios necesarios para guardar el texto indicado, siempre que sea igual o menor a n.
- Text: almacena texto de cualquier longitud.
Como insertar caracteres
En primer lugar recuerda que al insertar un texto o cadena debes entrecomillarlo con comillas simples y si quieres guardar una comilla como parte de la cadena puedes entrecomillar la palabra en sí y despues todo el texto.
También es posible utilizar una serie de caracteres de escape para introducir saltos de lineas, tabuladores, etc…
Caracter de escape | Función que realiza |
---|---|
\\ | escribe el caracter \ |
\n | nueva linea |
\r | retorno de carro |
\b | retroceso |
\t | tabulador |
\f | cambio de pagina |
En el siguiente ejemplo la palabra gracias, estará en una segunda linea.
select 'Hola visitante de ''MiguelTroyano.com'' \n Gracias.' Columna1
Lenguaje del código: JavaScript (javascript)
Tipo de Fecha y Hora
Tenemos disponibles 4 tipos de datos para insertar la fecha y hora en un campo. Son los siguientes:
Descripción | Tipo de datos | Unidad | Tamaño |
---|---|---|---|
Fecha | date | día, mes y año | 4 bytes |
Hora | time | hora, minuto, segundo y microsegundo | 4 bytes |
Fecha y Hora | timestamp | día, mes, año, hora, minuto, segundo y microsegundo | 8 bytes |
Intervalo de tiempo | interval | segundo, minuto, hora, dia, semana, mes, año, decada, siglo y milenio | 12 bytes |
create table TipoDatos (
Fecha date,
Hora time,
FechaHora timestamp,
Intervalo interval
);
Tipo array
El tipo de dato Array es un tipo especial de PostgreSQL que permite almacenar más de un valor del mismo tipo en una columna.
create table TipoDatos (
NEmpleado int,
Deptno text[3]
);
insert into TipoDatos
values (1, '{Contabilidad,Secretaria}');
Lenguaje del código: JavaScript (javascript)
Puedes acceder a los datos de este array viendo todos los valores o escogiendo la posición que quieras.
-- Visualizar todos los valores del array
select NEmpleado, deptno
from TipoDatos;
-- Visualizar la segunda posición del array del campo deptno
select NEmpleado, deptno[2]
from TipoDatos;
Lenguaje del código: JavaScript (javascript)
Si quieres conocer las dimensiones de un array puedes utilizar la función array_dims() indicando el nombre del campo entre paréntesis.
Tipos de geometría y red
Existen ciertos tipos de datos especiales relacionados con la geometría y la red:
- Box: un caja rectangular
- Linea: un conjunto de puntos.
- Point: un par geométrico de números.
- Lseg: un segmento de línea.
- Polygoon: una geometría.
- Inet: una dirección IP
- Macaddr: un dirección MAC
Tipo UUID
El tipo de datos UUID te permite almacenar identificadores únicos universales definidos por RFC 4122. Los valores UUID garantizan una mejor unicidad que SERIAL y se pueden utilizar para ocultar datos confidenciales expuestos al público, como los valores de ID en la URL.
Tipo JSON
PostgreSQL proporciona dos tipos de datos JSON: JSON y JSONB para almacenar datos JSON.
El tipo de datos JSON almacena datos JSON simples que requieren revisión para cada procesamiento, mientras que el tipo de datos JSONB almacena datos JSON en un formato binario que es más rápido de procesar pero más lento de insertar. Además, JSONB admite la indexación.