Bonjour,
J'utilse postgres 9.0 sous windows sur mon local et un autre postgres 8.4 sur un serveur linux .
J'ai mis deux base de donnée identique sur les deux serveurs nommée suiviBP avec la table eth0
1 2 3 4 5 6 7 8
| CREATE TABLE eth0
(
rx character varying(256),
tx character varying(256),
datecurrent date,
heurecurrent time without time zone NOT NULL,
CONSTRAINT eth0_pkey PRIMARY KEY (heurecurrent)
) |
Le but de mon projet est de pouvoir récupéré chaque ligne insérer dans la table eth0 de ma base local vers la table eth0 de la base sous linux .
Pour ce faire donc , j'ai crée un fonction f_insert_eth0
1 2 3 4 5 6 7 8 9 10 11 12
| CREATE OR REPLACE FUNCTION f_insert_eth0()
RETURNS trigger AS
$BODY$
DECLARE
BEGIN
PERFORM dblink_exec('host=10.128.1.2 dbname=suiviBP user=postgres port=5432 password=postgres', 'INSERT INTO eth0 (rx,tx,datecurrent,heurecurrent) VALUES (' || NEW.rx || ',' || NEW.tx || ',' || NEW.datecurrent || ',' || NEW.heurecurrent || ')');
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION f_insert_eth0() OWNER TO postgres; |
qui sera appelé par une trigger
1 2 3 4 5
| CREATE TRIGGER trg_insert_eth0
AFTER INSERT
ON eth0
FOR EACH ROW
EXECUTE PROCEDURE f_insert_eth0(); |
Je ne pense pas qu'il y a des érreurs sur mes codes mais quand je lance un insertion quelconque
insert into eth0 values ('69486586','64366',current_date,current_time);
J'ai le message d'érreur suivante
1 2 3 4
| ERREUR: erreur de syntaxe sur ou près de « : »
CONTEXT: Error occurred on dblink connection named "unnamed": could not execute command.
instruction SQL « SELECT dblink_exec('host=10.128.1.2 dbname=suiviBP user=postgres port=5432 password=postgres', 'INSERT INTO eth0 (rx,tx,datecurrent,heurecurrent) VALUES (' || NEW.rx || ',' || NEW.tx || ',' || NEW.datecurrent || ',' || NEW.heurecurrent || ')') »
PL/pgSQL function "f_insert_eth0" line 7 at PERFORM |
la connexion dblink_exec marche correctement.
et en effet quand dans ma fonction je n'ajoute que la valeur des rx et tx dans l'autre base cela fonctionne bien
PERFORM dblink_exec('host=10.128.1.2 dbname=suiviBP user=postgres port=5432 password=postgres', 'INSERT INTO eth0 (rx,tx) VALUES (' || NEW.rx || ',' || NEW.tx || ')');
C'est le fait que j'ajoute
NEW.datecurrent || ',' || NEW.heurecurrent
qui pose problème ?
Est ce que dans un trigger pour ajouter la valeur de la colonne datecurrent et heurecurrent nouvellement inseré je ne doit pas faire appelle à
NEW.datecurrent || ',' || NEW.heurecurrent
Quelle est la cause ? des idées ?
Partager