Tipos de datos de Postgres
Postgres tiene un conjunto muy completo de tipos de datos. el comando \dt de psql lista los
tipos de datos disponibles. Vamos a ver ahora los ms utilizados.
El tipo boolean o bool almacena valores lgicos. Los valores TRUE, 't', 'true', 'y', 'yes'
y '1' son tomados como cierto y pueden ser nulos.
El tipo smallint o int2 almacena enteros con signo entre -32768 y 32767.
El tipo integer, int o int4 almacena enteros con signo de aproximadamente 18 dgitos.
El tipo bit almacena uno de los valores 0 o 1. Las constantes de tipo bit se escriben
B'0' y B'1'.
El tipo bit varying o varbit(n) almacena secuencias de bits. Las constantes de este
tipo se escriben B'011'
El tipo numeric(presicin, escala) almacena nmeros exactos con la presicin
indicada.
El tipo real o float4 almacena nmeros punto flotante de 4 bytes.
El tipo double precision o float8 almacena nmeros punto flotante de 8 bytes.
El tipo money es equivalente a numeric(9,2) y ocupa 4 bytes, pero se desaconseja su
utilizacin.
El tipo timestamp o datetime almacena fechas y horas entre 4713 A. C. y 1465001
con una resolucin de un milisegundo.
El tipo interval almacena un intervalo de aproximadamente +/-178 millones de aos
con resolucin de un milisegundo.
El tipo date almacena fechas entre 4713 a. C. y 32767 con resolucin de un da.
El tipo time almacena la hora del da entre 0 y 23:59:59.99 con resolucin de 1
microsegundo.
El tipo char, character o bpchar almacena un caracter.
El tipo char(n) o bpchar(n) almacena exactamente n caracteres con relleno de
espacios si se almacenan menos caracteres.
El tipo character varying(n) o varchar(n) almacena un nmero variable de caracteres
hasta un mximo de n.
El tipo text almacena texto de tamao arbitrario.
TIPOS DE DATOS POSTGRES
Tipos de datos de propsito general en PostgreSQL
A continuacin mostramos un listado de los tipos de datos (data types) del motor de base de
datos gratuito PostgreSQL. Mostramos los tipos de datos de carcter o propsito general, los
ms habituales:
Tipo de datos Alias Descripcin
bigint int8 Entero con signo de 8 bytes
bigserial serial8 Autoincremento entero de 8 bytes
bit Cadena de bit de longitud fija
bit varying(n) varbit(n) Cadena de bit de longitud variable
boolean bool Lgico (true/false)
box Rectngulo en el plano
bytea Datos binarios
Cadena de caracteres de longitud
character varying(n) varchar(n)
variable
character(n) char(n) Cadena de caracteres de longitud fija
cidr Direccin IP de red (IPv4 IPv6)
circle Crculo en el plano
date Fecha (ao, mes, da)
Nmero de punto flotante de precisin
double precision float8
doble
Direccin de un host de red (IPv4 or
inet
IPv6)
integer int, int4 Enterio con signo, 4 bytes
interval(p) Intervalo de tiempo
Tipo de datos Alias Descripcin
Lnea infinita en el plano (no se aplica
line
completamente)
lseg Segmento de lnea en el plano
Direccin MAC de tarjeta o dispositivo
macaddr
de red
money Moneda
decimal Numrico exacto con precisin
numeric [ (p, s) ]
[ (p, s) ] modificable
Trazado geomtrico abierto y cerrado
path
en el plano
point Punto geomtrico en el plano
Polgono cerrado geomtrico en el
polygon
plano
Nmero de punto flotante de precisin
real float4
simple
smallint int2 Entero con signo de 2 bytes
serial serial4 Autoincremento, entero de 4 bytes
Cadena de caracteres de longitud
text
variable
time [ (p) ] [sin zona
Hoa del da
horaria]
time [ (p) ] con zona
timetz Hora del da, incluyendo la zona horaria
horaria
timestamp [ (p) ] [sin
timestamp Fecha y hora
zona horaria]
timestamp [ (p) ] con
timestamptz Fecha y hora incluyendo la zona horaria
zona horaria
Tipos numricos en PostgreSQL
A continuacin mostramos los tipos de datos numricos de PostgreSQL:
Tama
Nombre Descripcin Rango
o
2
smallint Entero de rango pequeo De -32768 a +32767
bytes
4 Seleccin habitual para De -2147483648 a
integer
bytes tipos enteros +2147483647
8 De -9223372036854775808 a
bigint Entero de rango largo
bytes 9223372036854775807
variabl Precisin especificada por
decimal Sin lmite
e el usuario, exacto
variabl Precisin especificada por
numeric Sin lmite
e el usuario, exacto
4 Variable/precisin,
real 6 dgitos decimales de precisin
bytes inexacto
double 8 Variable/precisin, 15 dgitos decimales de
precision bytes inexacto precisin
4
serial Autoincremento simple De 1 a 2147483647
bytes
8
bigserial Autoincremento largo De 1 a 9223372036854775807
bytes
Tipos de datos monetarios (moneda) en PostgreSQL
El tipo de datos de PostgreSQL para valores de moneda es:
Nombre Tamao Descripcin Rango
money 4 bytes Moneda De -21474836.48 a +21474836.47
Tipos de datos carcter en PostgreSQL
Los tipos de datos del motor de base de datos gratuito y open source PostgreSQL de tipo
carcter son:
Nombre Descripcin
character varying(n), varchar(n) De longitud variable, con lmite
character(n), char(n) De longitud fija
text De longitud variable, ilimitado
Tipos de datos binarios en PostgreSQL
El tipo de datos binario de PostgreSQL es:
Nombr
Tamao Descripcin
e
4 bytes adems de la cadena binaria Cadena binaria de longitud
bytea
actual variable
Tipos de datos Fecha/Hora en PostgreSQL
Los tipos de datos de fecha y hora del motor de base de datos PostgreSQL son:
Tama
Nombre Descripcin Valor bajo Valor alto Resolucin
o
timestamp 8 Fecha y hora 4713 BC 5874897 1
Tama
Nombre Descripcin Valor bajo Valor alto Resolucin
o
[ (p) ] [ sin microsegundo /
bytes AD
zona horaria ] 14 dgitos
timestamp Fecha y hora 1
8 5874897
[ (p) ] con con zona 4713 BC microsegundos
bytes AD
zona horaria horaria / 14 dgitos
12 Intervalo de -178000000 17800000 1
interval [ (p) ]
bytes hora aos 0 aos microsegundo
4
date Slo fecha 4713 BC 32767 AD 1 da
bytes
time [ (p) ]
8 Slo hora del 23:59:59.9 1
[ sin zona 00:00:00.00
bytes da 9 microsegundo
horaria]
Horas del da
time [ (p) ] con 12 00:00:00.00 23:59:59.9 1
con zona
zona horaria bytes +12 9-12 microsegundo
horaria
Tipos de datos geomtricos en PostgreSQL
Los tipos de datos para valores geomtricos del motor de base de datos PostgreSQL son:
Nombr
Tamao Representacin Descripcin
e
point 16 bytes Punto del plano (x,y)
line 32 bytes Lnea infinita en el plano ((x1,y1),(x2,y2))
lseg 32 bytes Segmento de lnea en el plano ((x1,y1),(x2,y2))
box 32 bytes Rectngulo en el plano ((x1,y1),(x2,y2))
16+16n Trazado geomtrico cerrado en el
path ((x1,y1),...)
bytes plano
path 16+16n Trazado geomtrico abierto en el [(x1,y1),...]
Nombr
Tamao Representacin Descripcin
e
bytes plano
polygo 40+16n
Plgono (similar a trazado cerrado) ((x1,y1),...)
n bytes
<(x,y),r> (centro y
circle 24 bytes Crculo
radio)
Tipos de datos de direcciones de red en PostgreSQL
Los tipos de datos para direcciones de red y mac de PostgreSQL son:
Nombre Tamao Descripcin
cidr 12 24 bytes Redes IPv4 IPv6
inet 12 24 bytes Hosts y redes IPv4 IPv6
macaddr 6 bytes Direccin MAC
Fuente: http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=499
Tipos de datos relevantes en PostgreSQL
Como todos los manejadores de bases de datos, PostgreSQL implementa los tipos
de datos definidos para el estndar SQL3 y aumenta algunos otros. Los definidos
por el estndar SQL3 se muestran en la tabla 8.1, mientras que las extensiones se
encuentran en la tabla 8.2.
Tabla: Tipos de datos del estndar SQL3 en PostgreSQL
Tipos de datos del estndar SQL3 en PostgreSQL
Tipo en Postgres Correspondiente en SQL3 Descripcin
valor lgico o booleano
bool boolean
(true/false)
cadena de carcteres de
char(n) character(n)
tamao fijo
date date fecha (sin hora)
nmero de punto flotante con
float4/8 float(86#86)
precisin 86#86
nmero de punto flotante de
float8 real, double precision
doble precisin
int2 smallint entero de dos bytes con signo
entero de cuatro bytes con
int4 int, integer
signo
int4 decimal(87#87) nmero exacto con 88#88
int4 numeric(87#87) nmero exacto con 89#89
money decimal(9,2) cantidad monetaria
hora en horas, minutos,
time time
segundos y centsimas
timespan interval intervalo de tiempo
timestamp timestamp with time zone fecha y hora con zonificacin
cadena de carcteres de
varchar(n) character varying(n)
tamao variable
Tabla 8.2: Tipos de datos extendidos por PostgreSQL
Tipos de datos extendidos en PostgreSQL
Tipo Descripcin
box caja rectangular en el plano
cidr direccin de red o de host en IP versin 4
circle crculo en el plano
inet direccin de red o de host en IP versin 4
int8 entero de ocho bytes con signo
line lnea infinita en el plano
lseg segmento de lnea en el plano
path trayectoria geomtrica, abierta o cerrada, en el plano
point punto geomtrico en el plano
polygon trayectoria geomtrica cerrada en el plano
serial identificador numerico nico
Tabla 8.3: Tipos de datos de PostgreSQL
Tipo Descripcin
SET conjunto de tuplas
abstime fecha y hora absoluta de rango limitado (Unix system time)
aclitem lista de control de acceso
bool booleano 'true'/'false'
box rectngulo geomtrico '(izquierda abajo, derecha arriba)'
carcteres rellenos con espacios, longitud especificada al momento
bpchar
de creacin
bytea arreglo de bytes de longitud variable
char un slo carcter
command identifier type, identificador de secuencia en
cid
transacciones
cidr direccin de red
circle crculo geomtrico '(centro, radio)'
date fecha ANSI SQL 'aaaa-mm-dd'
datetime fecha y hora 'aaaa-mm-dd hh:mm:ss'
filename nombre de archivo usado en tablas del sistema
float4 nmero real de precisin simple de 4 bytes
float8 nmero real de precisin doble de 8 bytes
inet direccin de red
int2 nmero entero de dos bytes, de -32k a 32k
int28 8 numeros enteros de 2 bytes, usado internamente
int4 nmero entero de 4 bytes, -2B to 2B
int8 nmero entero de 8 bytes, 90#9018 dgitos
line lnea geomtrica '(pt1, pt2)'
lseg segmento de lnea geomtrica '(pt1, pt2)'
macaddr direccin MAC
money unidad monetaria '$d,ddd.cc'
name tipo de 31 carcteres para guardar identificadores del sistema
numeric nmero de precisin mltiple
oid tipo de identificacin de objetos
oid8 arreglo de 8 oids, utilizado en tablas del sistema
path trayectoria geomtrica '(pt1, ...)'
point punto geomtrico '(x, y)'
polygon polgono geomtrico '(pt1, ...)'
regproc procedimiento registrado
reltime intervalo de tiempo de rango limitado y relativo (Unix delta time)
smgr manejador de almacenamiento (storage manager)
text cadena de carcteres nativa de longitud variable
tid tipo de identificador de tupla, localizacin fsica de tupla
time hora ANSI SQL 'hh:mm:ss'
timespan intervalo de tiempo '@ <number> <units>'
timestamp fecha y hora en formato ISO de rango limitado
tinterval intervalo de tiempo '(abstime, abstime)'
unknown tipo desconocido
cadena de carcteres sin espacios al final, longitud especificada al
varchar
momento de creacin
xid identificador de transaccin
Coma flotante
La representacin de coma flotante (en ingls floating point, que significa punto flotante) es
una forma de notacin cientfica usada en los microprocesadores con la cual se pueden
representar nmeros racionales extremadamente grandes y pequeos de una manera muy
eficiente y compacta, y con la que se pueden realizar operaciones aritmticas. El estndar
para la representacin en coma flotante es el IEEE 754.
Los nmeros de coma flotante decimales normalmente se expresan en notacin
cientfica con un punto explcito siempre entre el primer y el segundo dgitos. El
exponente o bien se escribe explcitamente incluyendo la base, o se usa una e para
separarlo de la mantisa.
Mantisa Exponente Notacin cientfica Valor en punto fijo
1.5 4 1.5 104 15000
-2.001 2 -2.001 102 -200.1
5 -3 5 10-3 0.005
6.667 -11 6.667e-11 0.0000000000667
El estndar
Casi todo el hardware y lenguajes de programacin utilizan nmeros de punto flotante
en los mismos formatos binarios, que estn definidos en el estndar IEEE 754. Los
formatos ms comunes son de 32 o 64 bits de longitud total:
Nmero Nmero
Bits Bits Bits del
Formato ms ms
totales significativos exponente
pequeo grande
Precisin ~3.4
32 23 + 1 signo 8 ~1.2 10-38
sencilla 1038
Precisin ~5.0 10- ~1.8
64 52 + 1 signo 11
doble 324
10308
Hay algunas pecularidades:
La secuencia de bits es primero el bit del signo, seguido del exponente y
finalmente los bits significativos.
El exponente no tiene signo; en su lugar se le resta un desplazamiento (127
para sencilla y 1023 para doble precisin). Esto, junto con la secuencia de bits,
permite que los nmeros de punto flotante se puedan comparar y ordenar
correctamente incluso cuando se interpretan como enteros.
Se asume que el bit ms significativo de la mantisa es 1 y se omite, excepto
para casos especiales.
Hay valores diferentes para cero positivo y cero negativo. Estos difieren en el
bit del signo, mientras que todos los dems son 0. Deben ser considerados
iguales aunque sus secuencias de bits sean diferentes.
Hay valores especiales no numricos (NaN, not a number en ingls) en los
que el exponente es todo unos y la mantisa no es todo ceros. Estos valores
representan el resultado de algunas operaciones indefinidas (como multiplicar
0 por infinito, operaciones que involucren NaN, o casos especficos). Incluso
valores NaN con idntica secuencia de bits no deben ser considerados iguales.