PostgreSQL dispone de los tipos enteros smallint, int y bigint que se comportan como lo hacen los enteros en muchos lenguajes de programación.
Los números con punto flotante real y double precisión almacenan cantidades con decimales. Una característica de los números de punto flotante es que pierden exactitud conforme crecen o decrecen los valores.
Aunque esta pérdida de exactitud no suele tener importancia en la mayoría de las ocasiones, PostgreSQL incluye el tipo numeric, que permite almacenar cantidades muy grandes o muy pequeñas sin pérdida de información. Por supuesto, esta ventaja tiene un coste, los valores de tipo numeric ocupan un espacio de almacenamiento considerablemente grande y las operaciones se ejecutan sobre ellos muy lentamente. Por lo tanto, no es aconsejable utilizar el tipo numeric si no se necesita una alta precisión o se prima la velocidad de procesamiento.
Nombre | Tamaño | Otros nombres | Comentario |
smallint | 2 bytes | int2 | |
int | 4 bytes | int4, integer | |
bigint | 8 bytes | int8 | |
numeric(p,e) | 11 + (p/2) | ‘p’ es la precisión, ‘e’ es la escala | |
real | 4 bytes | float, float4 | |
double precision | 8 bytes | float8 | |
serial | No es un tipo, es un entero autoincrementable |
Serial
La declaración serial es un caso especial, ya que no se trata de un nuevo tipo. Cuando se utiliza como nombre de tipo de una columna, ésta tomará automáticamente valores consecutivos en cada nuevo registro.
Ejemplo de una tabla que define la columna folio como tipo serial.
create table Factura(
folio serial,
cliente varchar(30),
monto real
);
PostgreSQL respondería esta instrucción con dos mensajes:
• En el primero avisa que se ha creado una secuencia de nombre factura_folio_seq:
NOTICE: CREATE TABLE will create implicit sequence `factura_folio_seq´ for SERIAL column `
• En el segundo avisa de la creación de un índice único en la tabla utilizando la columna folio:
NOTICE: CREATE TABLE / UNIQUE will create implicit index `factura_folio_key´ for table `factura´ CREATE
Si se declaran varias columnas con serial en una tabla, se creará una secuencia y un índice para cada una de ellas.