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