Referential integrity violation - Mailing list pgsql-general

From DaVinci
Subject Referential integrity violation
Date
Msg-id 20020313115300.GA3279@fangorn
Whole thread Raw
List pgsql-general
 Hi all.

 I have a cuious problem. First look at my tables:

-----------------------------------------------------
create table aviso (
    número        serial primary key,
    fecha        date default CURRENT_DATE,
    hora        time default CURRENT_TIME,
    usuario        int4 references empleado(cod),
    procedencia    int4 references procedencia,
    línea        int4 references línea,
    empresa        int4 references empresa,
    urgente        bool    default 'f',
    estado        int4 references estado,
    fecha_terminado    date,
    orden        int4,
    detalle        text
);
create index avi_fecha_ndx on aviso (fecha);
create index avi_hora_ndx on aviso (hora);
create index avi_usuario_ndx on aviso (usuario);
create index avi_procedencia_ndx on aviso (procedencia);
create index avi_linea_ndx on aviso (línea);
create index avi_empresa_ndx on aviso (empresa);
create index avi_urgente_ndx on aviso (urgente);
create unique index avi_orden_ndx on aviso (orden);
create index avi_estado_ndx on aviso (estado);
create index avi_fecha_terminado_ndx on aviso (fecha_terminado);

---------------------------------
create table transferencia (
    aviso        int4,
    técnico        int4,
    fecha        date default current_date,
    hora        time default current_time,
    importe        float,
    concepto    int4,
    a_caja        boolean default false
);

---------------------------------
create table gasto (
    cod        serial primary key,
    foreign key (técnico) references empleado(cod),
    foreign key    (aviso) references aviso(número),
    foreign key (concepto) references concepto_gasto(cod)
) inherits (transferencia);
create index gasto_aviso_ndx on gasto (aviso);
create index gasto_tecnico_ndx on gasto (técnico);
create index gasto_concepto_ndx on gasto (concepto);
create index gasto_fecha_ndx on gasto (fecha);
create index gasto_hora_ndx on gasto (hora);

create function gasto_cambiar_caja() returns opaque as '
    declare
    begin
        if NEW.a_caja and NEW.importe is not null then
            insert into movimiento_caja(importe,fecha,empleado) values (
                - NEW.importe,
                NEW.fecha,
                get_usuario());
        end if;
        return null;
    end;
' language 'plpgsql';

create trigger gasto_cambiar_caja after insert on gasto
    for each row execute procedure gasto_cambiar_caja();

-----------------------------------------------------------

 Database has more tables (obviously), but I supose it is enought with
 these.

 When I try next query:

     # update gasto SET importe = round(importe,2);

 I get error:

     ERROR:  <unnamed> referential integrity violation - key
    referenced from gasto not found in aviso

 I supose this error means that there is a reference in field "aviso"
 of table "gasto" to inexistent "número" from "aviso" (data was
 imported with copy from other database).

 If it is so, then inserting data again in table "gasto" with inserts
 instead of copy sould fix situation, revoking inserts that woldn't
 comply with referential integrity rules.

 I have do it so:

     pg_dump -a -d -f foo.sql -t gasto database

 and after truncate data:

     psql database -f foo.sql

 Then, when I try my query again, I get same error. Have you any idea
 of actual problem? Where am I wrong in my asumptions?.

 Thanks in advance.

                                 David


pgsql-general by date:

Previous
From: Arian Prins
Date:
Subject: Re: Stored procedure in PostgreSQL
Next
From: Stephan Szabo
Date:
Subject: Re: FAQ -- 'cache lookup failed' still a puzzle