PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Général » Erreur sur la creation d'une règle que j'arrive pas a resoudre » 03/07/2009 10:54:57

yenfou2000
Réponses : 2

Bonjour,
Voici ma règle générée en PHP ( elle permet d'inserer des enregistrements  a partir d'une vue)
create or replace rule RINS_V75_BDALK_T237_BDALK_T224 as on insert to BDALK_V75 do instead (
      insert into BDALK_T237 (T237_ID,CONTRIB_ID,CONTRIB_PWD,T237_DATE,T224_ID_FK,NOM) values  (new.T237_ID,new.CONTRIB_ID,new.CONTRIB_PWD,new.T237_DATE,new.T224_ID_FK,new.NOM);
      insert into BDALK_T224 (T224_ID,CONTRIB_ID,CONTRIB_PWD,T224_DATE) values (new.T224_ID,new.CONTRIB_ID,new.CONTRIB_PWD,new.T224_DATE);
)

Je ne comprend pas l'erreur produite :
Erreur SQL :

ERREUR:  la colonne *NEW*.contrib_id n'existe pas

Pourquoi une erreur uniquement sur cette colonne ? si je met une valeur a la place, y a plus de pb?

#2 Re : Général » Modification de vue avec les régles SQL » 22/06/2009 18:11:36

gleu a écrit :

Pk default ?

Parce que la colonne id est une colonne autoincrémentée sur la table. Je préfère garder ça. Maintenant, il est tout à fait possible d'indiquer NEW.id.

Quel l'utilité du "new"

NEW est le nom de la pseudo ligne à insérer. NEW.contenu correspond donc à la valeur fournie dans la clause VALUES du INSERT.

Ok je comprend mieux merci smile
A la place de "default" est qu'on peut utiliser nextID de la sequence correspondante ? car toutes mes primary key sont basées sur des sequences. ?

#3 Re : Général » Modification de vue avec les régles SQL » 22/06/2009 15:16:36

Ok, cette exemple fonctionne bien, je pense pouvoir l'adapter a mon application.
Par contre, je comprend la fin de la regle :
create rule insertv1 as on insert to v1 do instead insert into t1 values (default, new.contenu);

Pk default ? Quel l'utilité du "new".

#4 Re : Général » Modification de vue avec les régles SQL » 22/06/2009 12:06:29

Ok, mais pour déclencher l'événement.
Il faut que l'événement déclencheur de la règle soit correcte.
Syntaxiquement, insert into TABLE_VIEW_NAME .... => provoque une erreur,   donc le moteur ne pourra pas détecter la règle.

#5 Re : Général » Modification de vue avec les régles SQL » 22/06/2009 11:02:12

gleu a écrit :

La règle permet de dire que, si le moteur intercepte un INSERT sur la vue, l'INSERT doit se faire sur la table. Donc, la requête de création de la règle devrait plutôt être :
     JE CROYAIS QU'ON POUVAIT PAS FAIRE DE INSERT SUR UNE VUE ????


CREATE RULE new10 AS ON INSERT TO nom_de_la_vue  DO  insert into nom_de_la_table (col1_table, col2_table, col3_table) values (col_vue_correspondant_a_col1_table, col_vue_correspondant_a_col2_table, col_vue_correspondant_a_col3_table)

#6 Re : Général » Modification de vue avec les régles SQL » 22/06/2009 10:03:21

J'ai compris cette règle en bas de page.

Mais ça ne résoud pas mon problème : en fait je veux pouvoir faire un insert sur un vue.
Je me suis dit qu'il était peut être possible de le faire avec les règles.
Avez vous une idée ?

#7 Re : Général » Modification de vue avec les régles SQL » 19/06/2009 17:42:08

voila : j'ai une vue (avec des jointures sur plusieurs tables) et quand je l'execute j'obtiens une table avec des informations.
Ensuite a partir de cette table virtuelle, je souhaiterais y rajouter des informations comme un insert sur une table virtuelle

#8 Re : Général » Modification de vue avec les régles SQL » 19/06/2009 17:04:42

par contre je n'ai aucun moyen de savoir a l'avance les tables concernées par la vue.
Y aurait il un moyen de connaitre les colonnes uniquement grace à une vue ?

#9 Re : Général » Modification de vue avec les régles SQL » 19/06/2009 16:53:22

Ah ok, je comprend mieux. C'est vrai, c'est logique. La vue est une table virtuelle,

#10 Général » Modification de vue avec les régles SQL » 19/06/2009 16:17:58

yenfou2000
Réponses : 16

Bonjour,
Je souhaiterais faire des "insert" sur une vue que j'ai créée auparavant.
Pour cela, j'ai crée une régle ON INSERT sur la vue :
CREATE RULE new10 AS ON INSERT TO BDALK_V75  DO  insert into BDALK_V75 (T237_ID, CONTRIB_ID, CONTRIB_PWD, T237_DATE) values (10, 1, 'mdpoi', now())
Jusqu'ici tout se passe bien, la regle s'est correctement ajoutée.

Mon problème : comment utiliser cette régle ?
J'ai essayé : INSERT INTO BDALK_V75 (T237_ID, CONTRIB_ID, CONTRIB_PWD, T237_DATE) VALUES (22, 33, 'mmm', now()) mais il y a un message d'erreur : récursion indéfinie détectée. J'ai pas très bien compris l'utilisation des règles, je crois.
Pouvez vous m'éclaircir ce point ?

Pied de page des forums

Propulsé par FluxBB