Re: Evitar overlaps Indice único o CONSTRAINT EXCLUDE con campos varchar, tstzrange

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: mauricio pullabuestan <jmauriciopb(at)yahoo(dot)es>
Cc: Postgres ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Evitar overlaps Indice único o CONSTRAINT EXCLUDE con campos varchar, tstzrange
Date: 2019-12-18 18:24:18
Message-ID: 20191218182418.GA22433@alvherre.pgsql
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

mauricio pullabuestan escribió:

> CREATE TABLE permiso
> (
>   numero_permiso integer NOT NULL,
>   director_id character varying(5),
>   dependiente_id character varying(5),
>   jornada_id character varying(2),
>   permiso_periodo tstzrange,
>   observaciones character varying(100),
>   activo boolean,
>   CONSTRAINT pk_permisos PRIMARY KEY ( numero_permiso)
> );
>
>
> Necesito evitar que se solapen los permisos de dependiente_id, permiso_periodo.
>
>
> Al ser 2 campos de distintos tipos no se si se puede y como hacer un exclude o un indice unico con estos 2 campos, de poder cual seria la mejor opción, si no se puede como podría evita overlaps  

Hola, esto en Postgres se llama "restricción de exclusión" (exclusion
constraint en inglés); necesitas un índice gist con soporte para los
tipos en cuestión. Algo así

create extension btree_gist; -- esto es para el operador = en varchar

CREATE TABLE permiso (
numero_permiso integer NOT NULL,
director_id character varying(5),
dependiente_id character varying(5),
jornada_id character varying(2),
permiso_periodo tstzrange,
observaciones character varying(100),
activo boolean,
CONSTRAINT pk_permisos PRIMARY KEY ( numero_permiso),
constraint no_traslape exclude using gist (dependiente_id with =, permiso_periodo with &&));

--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message mauricio pullabuestan 2019-12-19 17:20:45 Re: Evitar overlaps Indice único o CONSTRAINT EXCLUDE con campos varchar, tstzrange
Previous Message mauricio pullabuestan 2019-12-18 18:00:52 Evitar overlaps Indice único o CONSTRAINT EXCLUDE con campos varchar, tstzrange