Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je souhaite utiliser la fonction DBlink dans mes trigger afin de mettre à jour une ou plusieurs tables à partir d'une base de données distincte.
Le soucis est que je rencontre quelques problèmes avec la synthaxe :
perform dblink_connect('dbname=database user=postgres password=postgres');
perform dblink_exec('insert into auteur(
id,
nom,
prenom,
telephone
)
select('||NEW.id||','''||NEW.nom||''','''||NEW.prenom||''','''||NEW.telephone||''');');
Pour les champs contenant des caractères je suis obligé de mettre des quotes à mes champs "new" pour la concaténation sinon ça ne marche pas.
Mais le problème est que si le champs est vide la reqête ne va pas marcher (rien ne s'ajoute) et si un des champs contient une apostrophe la reqête plante...
Pour que ça marche il faut que la ligne soit entièrement complétée e sans apostrophes ce qui pose problème.
Je voudrais savoir si il est possible de remèdier à ces problèmes.
En vous remerciant par avance.
pgAdmin3, W7
Hors ligne
Pour la question des guillemets, il vous suffit d'utiliser la fonction quote_literal.
Par champ vide, je suppose que vous voulez dire un champ à NULL. Dans ce cas, utilisez quote_nullable au lieu de quote_literal.
Guillaume.
Hors ligne
Bonjour,
Je viens de tester,
Les deux fonction marchent, cependant je n'arrive pas à les utiliser les deux pour une même variable, en effet, j'ai testé :
quote_litteral(quote_nullable(NEW.nom)) mais le problème est que le champ dans la nouvelle table est entouré de quotes, comment puis je corriger cela?
Merci
Dernière modification par ari_gold (01/03/2016 11:01:42)
Hors ligne
Bonjour,
Tu pourras abreuver ta curiosité dans l'excellente doc en ligne :
http://docs.postgresql.fr/9.4/plpgsql-statements.html
Cordialement,
Sébastien.
Hors ligne
Bonjour et merci pour ta réponse,
Du coup j'ai modifié mon précédent message en même temps que tu répondais...
Alors si quelqu'un a la réponse à la question de mon message précédent ça serait vraiment cool
Hors ligne
Il faut faire l'un ou l'autre mais pas les deux...
Guillaume.
Hors ligne
Ok je vais m'en contenter alors,
Par contre j'ai un autre problème là, est ce qu'il faut installer un plugin pour quote_nullable? parce que sur mon pc perso ça marcahait nickel et là sur le pc du bureau il me met que l'opérateur n'existe pas...
Merci.
Bon finalement je pense avoir trouver le problème, en effet mon trigger coince au niveau du champ geometrie, est ce qu'il ya une différence de syntaxe entre les champs geometry de postgis et les autres champs?
Dernière modification par ari_gold (02/03/2016 10:30:40)
Hors ligne
Vous ne devez pas avoir la même version de PostgreSQL. quote_nullable apparaît en 8.4, ce qui voudrait dire que votre PC de bureau a une version antérieure à la 8.4.
Guillaume.
Hors ligne
Mais le quote nullable marche c'est que pour le champ geometrie, je comprend pas pourquoi, dès que je l'ajoute dans ma fonction ça ne veut plus marcher...
Et je suis tomber sur cette discussio n où la personne qui pose la question a le même message d'erreur que moi mais je ne comprends pas le fin mot de l'histoire
http://forums.postgresql.fr/viewtopic.php?id=1681
Dernière modification par ari_gold (02/03/2016 15:01:05)
Hors ligne
"ça ne veut plus marcher", ça ne veut rien dire. Merci de préciser requête et message d'erreurs, sinon il n'y a aucun moyen de vous aider.
Guillaume.
Hors ligne
Pages : 1