Los valores de los tipos temporales deben satisfacer varias restricciones para que estén bien definidos. Estas restricciones se dan a continuación.
Las restricciones en el tipo base y el tipo timestamptz
deben satisfacerse.
Un valor de secuencia debe estar compuesto por al menos un valor de instante.
Un valor de secuencia instantánea debe tener límites superior e inferior inclusivos.
En un valor de secuencia, las marcas de tiempo de los instantes que la componen deben ser diferentes y estar ordenadas.
En un valor de secuencia con interpolación escalonada, los dos últimos valores deben ser iguales si el límite superior es exclusivo.
Un valor de conjunto debe estar compuesto por al menos un valor unitario.
En un valor de conjunto de instantes, los instantes que lo componen deben ser diferentes y ordenados. Esto implica que la extensión temporal de un valor de conjunto de instantes es un conjunto ordenado de valores de timestamptz
sin duplicados.
En un valor de conjunto de secuencias, los valores de las secuencias componentes no deben superponerse y deben estar ordenados. Esto implica que la extensión temporal de un valor de conjunto de secuencias es un conjunto ordenado de períodos disjuntos.
Se genera un error cuando no se satisface una de estas restricciones. Ejemplos de valores temporales incorrectos son los siguientes.
-- Valor del tipo de base incorrecto SELECT tbool '1.5@2001-01-01 08:00:00'; -- Valor del tipo base no es un punto SELECT tgeompoint 'Linestring(0 0,1 1)@2001-01-01 08:05:00'; -- Marca de tiempo incorrecta SELECT tint '2@2001-02-31 08:00:00'; -- Secuencia vacía SELECT tint ''; -- Límites incorrectos para la secuencia instantánea SELECT tint '[1@2001-01-01 09:00:00)'; -- Marcas de tiempo duplicadas SELECT tint '[1@2001-01-01 08:00:00, 2@2001-01-01 08:00:00]'; -- Marcas de tiempo desordenadas SELECT tint '[1@2001-01-01 08:10:00, 2@2001-01-01 08:00:00]'; -- Valor final incorrecto SELECT tint '[1@2001-01-01 08:00:00, 2@2001-01-01 08:10:00)'; -- Conjunto de secuencias vacío SELECT tints(ARRAY[]); -- Marcas de tiempo duplicadas SELECT tinti(ARRAY[tint '1@2001-01-01 08:00:00', '2@2001-01-01 08:00:00']); -- Períodos superpuestos SELECT tints(ARRAY[tint '[1@2001-01-01 08:00:00, 1@2001-01-01 10:00:00)', '[2@2001-01-01 09:00:00, 2@2001-01-01 11:00:00)']);