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