Violation de l'intégrité référentielle
Salut
La situation...
Les tables tm et tf (tf liée à tm par une intégrité référentielle)
Code:
1 2
| create table tm(idm serial not null primary key, vm varchar);
create table tf(idf serial not null primary key, idm int not null references tm(idm) on delete cascade, vf varchar); |
Un fonction trigger qui annule la suppression dans tf
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
--le trigger
create function tgtf() returns trigger
as
$$
begin
return null;
end
$$ language plpgsql
--liaison à tf
create trigger tgf before delete on tf
FOR EACH ROW
EXECUTE PROCEDURE tgtf(); |
insertion de données dans tm et tf
Code:
1 2
| insert into tm(vm) values('a'),('b'),('c');
insert into tf(idm, vf) values(1, 'a1'),(1, 'a2'), (2, 'b1'), (2, 'b2'),(3, 'c1'),(3, 'c2'); |
suppression d'une ligne de tm
Code:
delete from tm where idm=1;
la jointure gauche
Code:
select tf.idm, tf.vf, tm.idm from tf left join tm on tf.idm=tm.idm;
idm |
vf |
idm |
1 |
a1 |
|
1 |
a1 |
|
2 |
b1 |
2 |
2 |
b2 |
2 |
3 |
c1 |
3 |
3 |
c2 |
3 |
Qu'en dites-vous?
J'avais une fois remarqué qu'une des mes bd présentait ce problème (violation d'intégrité référentielle) sans que je ne sache comment c'est arrivé. Maintenant que j'ai reproduit la situation, je veux comprendre le problème.
@+