PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#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.

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

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 smile

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...

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.

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.

Hors ligne

Pied de page des forums