Cette fois-ci Krapulax, c'est à moi de
car j'ai mal interpréter l'aide de postgres: il disait:
[...]Il y a un problème si vous essayez d'utiliser les règles conditionnelles pour les mises à jour de vues; une règle INSTEAD doit être inconditionnelle pour chaque action que vous voulez permettre sur la vue. Si la règle est conditionnelle, ou n'est pas INSTEAD, le système rejettera encore les tentatives d'exécution de mise à jour, car il croit qu'il peut pour finir tenter d'exécuter l'action sur la table fictive dans certains cas. Si vous voulez manipuler tous les cas possibles de règles conditionnelles, vous pouvez; ajoutez juste une règle DO INSTEAD NOTHING pour vous assurer que le système comprenne qu'il ne sera jamais appelé sur des mises à jour de tables fictives. Ensuite, faites une règle conditionnelle non-INSTEAD.[...]
Hors je pensais que la condition était la clause facultative condition dans le create rule et pas dans le delete. Donc il faut faire un create rule sans le mot clé instead et ensuite en refaire un avec le instead et nothing dans la clause action:
1 2 3 4 5 6 7 8 9 10 11 12
| create or replace rule rdvprogramme
as on delete to vprogramme
do
(
delete from programmeenseignement
where idcollection = old.id;
delete from collection
where id = old.id
);
create or replace rule rdvprogramme
as on delete to vprogramme
do instead nothing; |
Maintenant cela joue... Merci merci merci... car j'avais regardé dans les bugs et TODO liste de Postgres. Ils vont d'ailleurs créer automatiquement les rules pour les vues dans les prochaines versions.[/i]
Partager