Salut
La situation...
Les tables tm et tf (tf liée à tm par une intégrité référentielle)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
delete from tm where idm=1;
la jointure gauche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
@+