Mon ami postgres et ses dblinks

Mon ami postgres et ses dblinks - SQL/NoSQL - Programmation

Marsh Posté le 02-03-2005 à 10:53:07    

Soit une base "base1" qui contient la table "base1table1" définie comme:
CREATE TABLE base1table (b1t1id serial CONSTRAINT b1t1id PRIMARY KEY, b1t1var integer);
 
Soit une base "base2" avec:
CREATE VIEW base1table1 AS SELECT * FROM dblink('dbname=base1','select * from base1table1') AS t1(b1t1id integer, b1t1var integer);
 
et:
CREATE RULE base1table1 AS ON INSERT TO base1table1 DO INSTEAD select dblink_exec(to_rule(NEW.b1t1var));
 
sachant:
CREATE FUNCTION to_rule(integer) RETURNS text AS 'SELECT \'insert into base1table1(b1t1var) values (\'||text($1)||\');\' AS result;' LANGUAGE SQL;
 
Voilà mon problème: si je me met sur "base2", que je fais un SELECT * FROM base1table1; pas de problèmes, je récupère toutes les données. Logique.
Or, si je fais un INSERT INTO base1table1(b1t1var) VALUES (12);, il me sort:
ERREUR:  sql error
DETAIL:  ERREUR:  NEW utilisé dans une requête dans une règle
 
Mais le pire, c'est que l'insert dans la table "base1table1" de la base "base1" marche quand même...
 
Une petite idée pour comprendre d'où vient l'erreur et ne plus avoir droit à cet hideux message?

Reply

Marsh Posté le 02-03-2005 à 10:53:07   

Reply

Marsh Posté le 02-03-2005 à 15:11:16    

Et c'est encore un topic sans réponses que notre ami vient d'ouvir, il bien parti je crois pour l'award du plus grands nombre de questions sans réponses...

Reply

Marsh Posté le 04-03-2005 à 09:52:54    

Bon, j'ai tout "droppé" et retapé, et manifestement ça marche sans erreur cette fois.
J'ai l'impression qu'un moment donné j'ai cumulé ma règle "DO INSTEAD" qui marche avec une "DO" (tout court) qui générait l'erreur, et du coup je ne récupérai que le message d'erreur, même si l'éxecution se faisait convenablement...
Merci pour votre aide à tous [:itm]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed