Re: problema orden comprobación integridad

From: "Moises Alberto Lindo Gutarra" <mlindo(at)gmail(dot)com>
To: "Lista PostgreSql" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: problema orden comprobación integridad
Date: 2008-10-02 21:45:31
Message-ID: 5db591c00810021445h3d6e617ekff41c80ff6fad901@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2008/10/2 Linos <info(at)linos(dot)es>:
> Hola, les explico mi problema, uso postgresql 8.3.3 con una base de datos en
> UTF8, el esquema de la tabla es esta:
>
> CREATE TABLE bulto_cabecera
> (
> id_documento integer NOT NULL,
> bulto_id integer NOT NULL,
> numero_bulto_documento integer NOT NULL,
> time_stamp timestamp with time zone DEFAULT now(),
> id_usuario integer NOT NULL,
> completo boolean NOT NULL,
> tipo_origen character varying(32) NOT NULL,
> CONSTRAINT albaran_salida_bultos_cab_pkey PRIMARY KEY (bulto_id),
> CONSTRAINT bulto_cabecera_id_documento_key UNIQUE (id_documento,
> numero_bulto_documento)
> )
> WITH (OIDS=FALSE);
> ALTER TABLE bulto_cabecera OWNER TO skuda;
>
> cuando intento insertar una fila ya existente no siempre me da el error
> sobre la clave primaria si no q a veces salta el indice único, fijense por
> ejemplo.
>
> skuda=# INSERT INTO bulto_cabecera(id_documento, bulto_id,
> numero_bulto_documento, time_stamp, id_usuario, completo, tipo_origen)
> VALUES ('2000244341'::integer, '2000244343'::integer, '2'::integer,
> 'now()'::timestamp with time zone, '2102'::integer, FALSE::boolean,
> 'ALBARAN_SALIDA'::text)
> skuda-# ;
> ERROR: duplicate key value violates unique constraint
> "albaran_salida_bultos_cab_pkey"
> skuda=# \q
>
> skuda(at)skuda ~/temporal/ficheros_sql $ psql -d skuda
> Welcome to psql 8.3.3, the PostgreSQL interactive terminal.
>
> Type: \copyright for distribution terms
> \h for help with SQL commands
> \? for help with psql commands
> \g or terminate with semicolon to execute query
> \q to quit
>
> skuda=# INSERT INTO skuda.bulto_cabecera(id_documento, bulto_id,
> numero_bulto_documento, time_stamp, id_usuario, completo, tipo_origen)
> VALUES ('2000244341'::integer, '200024434'::integer, '2'::integer,
> 'now()'::timestamp with time zone, '2102'::integer, FALSE::boolean,
> 'ALBARAN_SALIDA'::text);
> ERROR: duplicate key value violates unique constraint
> "bulto_cabecera_id_documento_key"
>
> La verdad es q normalmente no me importaría (una fila no valida es mala sea
> el motivo q sea) pero el problema es q la solución para la replicación que
> estoy usando se basa en un sistema de callback si el registro ya existe que
> lo pasa a un update y claro se base en error de clave primaria el callback,
> como aquí el error es un indice único me bloquea los canales de replicacion
> con un error, por que sucede esto? puedo hacer q siempre salte el error
> sobre la clave primaria sin borrar el indice único?
>
> Gracias y un saludo,
> Miguel Angel.
> --
> TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net
>

Creo que esta demas el
CONSTRAINT bulto_cabecera_id_documento_key UNIQUE (id_documento,
numero_bulto_documento)
ya que siempre se dará esta regla con la pk.

--
Atentamente,
Moisés Alberto Lindo Gutarra
Asesor - Desarrollador Java / Open Source
Linux Registered User #431131 - http://counter.li.org/
Cel: (511) 995081720
MSN: mlindo(at)tumisolutions(dot)com

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Linos 2008-10-02 21:54:13 Re: problema orden comprobación integridad
Previous Message Alvaro Herrera 2008-10-02 21:34:45 Re: ATOMICIDAD ante la perdida de coneccion