4.7.2. Tipos numericos

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.