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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
insert into eth0 values ('69486586','64366',current_date,current_time);

J'ai le message d'érreur suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 à

Code : Sélectionner tout - Visualiser dans une fenêtre à part
NEW.datecurrent || ',' || NEW.heurecurrent
Quelle est la cause ? des idées ?