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?