El día 2 de octubre de 2008 16:54, Linos <[EMAIL PROTECTED]> escribió: > Moises Alberto Lindo Gutarra escribió: >> >> 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. >> >> >> > > en correcto esta regla si pero esa comprobación de integridad me puede ser > útil si hay un fallo en la aplicación por ejemplo, se supone que no deberían > poder meter para el mismo documento, el mismo numero de bulto dos veces, de > todas maneras no debería saltar siempre primero la clave primaria? > -- > TIP 4: No hagas 'kill -9' a postmaster >
eso jamas va a suceder, ni el mismo nro de bulto ni ninguno con el documento ya que el documento id es la PK. Quita ese constraint. -- 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