Vous n'êtes pas identifié(e).
Pages : 1
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
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)
Julien.
https://rjuju.github.io/
Hors ligne
Merci rjuju , j'ai du installer le module dblink , et maintenant ca fonctionne
Hors ligne
Pages : 1