Vous n'êtes pas identifié(e).

#1 28/11/2011 15:50:57

fanah
Membre

utilisation de dblink_exec

Bonjour,

j'utilise postgresql  "PostgreSQL 9.0.4, compiled by Visual C++ build 1500, 32-bit" sous windows et je veut insérer les données de ma table t1 vers une autre table t2 dans une base postgres 8.3 "PostgreSQL 8.3.11 on i486-pc-linux-gnu, compiled by GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2" sous linux .

Pou ce faire , j'ai écrit une fonction

[CODE]
CREATE OR REPLACE FUNCTION f_affiche ()
RETURNS VOID
AS $$
DECLARE
    c1 cursor IS SELECT * FROM eth0;
    eth0_row eth0%ROWTYPE;
BEGIN

    FOR eth0_row IN c1
    LOOP
     PERFORM dblink_exec('dbname=suivBP host=10.128.1.2', 'INSERT INTO eth0 (rx,tx,datecurrent,heurecurrent) VALUES (' || eth0_row.rx || ', ' || eth0_row.tx || ', ' || eth0_row.datecurrent || ', ' || eth0_row.heurecurrent || ')');
    END LOOP;
    RETURN;
END

$$ LANGUAGE PLPGSQL


[CODE]



J'ai l'érreur suivant quand je lance ma fonction

ERREUR:  la fonction dblink_exec(unknown, text) n'existe pas
LINE 1: SELECT dblink_exec('dbname=suivBP host=10.128.1.2', 'INSERT ...
               ^
HINT:  Aucune fonction ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.
QUERY:  SELECT dblink_exec('dbname=suivBP host=10.128.1.2', 'INSERT INTO eth0 (rx,tx,datecurrent,heurecurrent) VALUES (' || eth0_row.rx || ', ' || eth0_row.tx || ', ' || eth0_row.datecurrent || ', ' || eth0_row.heurecurrent || ')')
CONTEXT:  PL/pgSQL function "f_affiche" line 8 at PERFORM

********** Erreur **********

ERREUR: la fonction dblink_exec(unknown, text) n'existe pas
État SQL :42883
Astuce : Aucune fonction ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.
Contexte : PL/pgSQL function "f_affiche" line 8 at PERFORM




Est ce que c'est lier au version des deux base ?
Si oui, est que vous avez des idées ?

Hors ligne

#2 28/11/2011 17:41:23

rjuju
Administrateur

Re : utilisation de dblink_exec

Bonjour.

L'erreur vient de l'appel à la fonction dblink_exec.
Vous pouvez essayer de caster le premier paramètre en text pour voir si ça résoud le problème :

PERFORM dblink_exec('dbname=suivBP host=10.128.1.2'::text, 'INSERT INTO eth0 (rx,tx,datecurrent,heurecurrent) VALUES (' || eth0_row.rx || ', ' || eth0_row.tx || ', ' || eth0_row.datecurrent || ', ' || eth0_row.heurecurrent || ')');

Si cela ne marche pas, c'est vraisemblablement que le module dblink n'est pas installé sur la base de donnée où se trouve votre fonction f_affiche.

Dans le cas d'une installation windows, le module doit certainement être disponible, en attente d'installation. Le script d'installation sql doit se trouver dans votre répertoire d'installation postgres, répertoire share/contrib.

Dernière modification par rjuju (28/11/2011 17:42:08)

Hors ligne

#3 30/11/2011 09:36:20

fanah
Membre

Re : utilisation de dblink_exec

Merci rjuju , j'ai du installer le module dblink , et maintenant ca fonctionne

Hors ligne

Pied de page des forums