Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 01/03/2016 10:19:29
- ari_gold
- Membre
Trigger et DBlink
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
#2 01/03/2016 10:24:39
- gleu
- Administrateur
Re : Trigger et DBlink
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
#3 01/03/2016 10:29:17
- ari_gold
- Membre
Re : Trigger et DBlink
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
#4 01/03/2016 10:59:45
- ruizsebastien
- Membre
Re : Trigger et DBlink
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
#5 01/03/2016 11:17:48
- ari_gold
- Membre
Re : Trigger et DBlink
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
#6 01/03/2016 12:28:35
- gleu
- Administrateur
Re : Trigger et DBlink
Il faut faire l'un ou l'autre mais pas les deux...
Guillaume.
Hors ligne
#7 01/03/2016 17:19:43
- ari_gold
- Membre
Re : Trigger et DBlink
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
#8 02/03/2016 11:11:03
- gleu
- Administrateur
Re : Trigger et DBlink
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
#9 02/03/2016 11:25:37
- ari_gold
- Membre
Re : Trigger et DBlink
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
#10 02/03/2016 21:04:04
- gleu
- Administrateur
Re : Trigger et DBlink
"ç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