2008/10/2 Linos <[EMAIL PROTECTED]>:
> 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
>
> [EMAIL PROTECTED] ~/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: [EMAIL PROTECTED]
--
TIP 8: explain analyze es tu amigo

Responder a