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

#1 28/03/2010 21:22:12

SydneyBristow
Membre

Aide en PL/PostgreSQL

J'ai quelques questions, je viens de m'initier à postgreSQL et y a certains trucs j'arrive pas à trouver la réponse.
1-Comment associer ce de manière pertinente un trigger à une relation
2- Comment malgré tout modifier un tuple si celui-ci a été bloqué
3- Comment paramétrer le nom d'un attribut de blocage
4- Comment associer de manière pertinente l'opération, le niveau et le moment auxquels doit être attaché un trigger
5- Comment être sûr de la validité de ce trigger en cas de transactions opérant en parallèle ? Que penser de l'impact sur les performances ?
6- Si une table doit avoir un nombre de tuples bornés. Comment développer un TRIGGER paramétrique pour obtenir cette fonctionnalité. Quel impact sur les transactions...

Hors ligne

#2 28/03/2010 21:41:46

Marc Cousin
Membre

Re : Aide en PL/PostgreSQL

1: ça se fait avec create trigger : http://docs.postgresql.fr/8.4/sql-createtrigger.html
2 : bloqué ? bloqué comment ?
3 : aucune idée de ce que vous voulez dire (normal, ça doit dépendre du 2)
4 : Toujours avec create trigger (for each statement, for each row, after, before)
5 : En le programmant correctement smile. Plus sérieusement, le trigger obéit aux mêmes rêgles que toutes les autres opérations, dans les transactions. Un trigger a toujours un impact sur les performances. Cet impact dépendant surtout du code de la fonction trigger.
6 : un nombre maximum de tuple ? Impossible de faire ça sans impact sur les performances dans un SGBD MVCC : une table n'a un nombre de tuple précis que dans le contexte de la requête qui pose la question. 2 requêtes simultanées ne verront pas forcément le même nombre d'enregistrements, en fonction du snapshot qu'elles auront sur la base. Si vous voulez vraiment le contrôler, il vous faudra un compteur stocké ailleurs (autre table), et poser un verrou sur ce compteur à chaque fois que vous voudrez ajouter ou enlever un enregistrement de votre table (par trigger par exemple). L'impact sur les performances sera assez fort, puisque vous aurez au maximum une transaction autorisée à ajouter/supprimer sur la table.


Marc.

Hors ligne

#3 28/03/2010 22:00:36

SydneyBristow
Membre

Re : Aide en PL/PostgreSQL

Merci pour les réponses mais ces questions me sont venu en essayant de développer deux triggers :
1- une fonction trigger lock_tuple de blocage d'un tuple par un attribut booléen lock. Si l'attribut est vrai, toute modification du tuple est bloquée. Sinon, les modifications sont autorisées.
2- une fonction trigger comptes qui maintient dans une table externe le nombre total de tuples des tables auxquelles il est attaché. En argument de cette trigger, on trouvera le nom de la table de compte, les noms des attributs stockants le nom de la relation d'une part et le nombre de tuple de cette relation.

Et dont je bloque dessus

Hors ligne

#4 28/03/2010 22:04:24

SydneyBristow
Membre

Re : Aide en PL/PostgreSQL

De l'aide ???

Hors ligne

#5 29/03/2010 14:26:54

Marc Cousin
Membre

Re : Aide en PL/PostgreSQL

Bonjour,

Je pense que votre approche est fondamentalement mauvaise : il existe déjà un mécanisme de verrouillage dans la base de données (select for update). Votre modification d'attribut ne peut être que source d'ennuis. Mais sans davantage d'informations, il m'est difficile de vous aider.

Je pense que vous auriez une aide bien plus pertinente si vous décriviez ce que vous voulez faire dans l'ensemble, plutôt que de demander de l'aide sur des détails d'implémentation.


Marc.

Hors ligne

#6 09/11/2010 14:33:49

jila_clack
Membre

Re : Aide en PL/PostgreSQL

slt a tous j'aimerais savoir cmt travailler sur l'invite de commande SQL Shell (psql), je fais allusion ace qu'il faut remplir au debut :
Serveur [localhost]:...????
Database[postgres]:..????
Port [5432]:??
Username [prostgres]:..???
Password for user postgres:..????
voila ce qu'on me demamnde  de remplir avant de commancer
j'ai besion d'aide svp
merci....

Hors ligne

#7 09/11/2010 14:36:45

Marc Cousin
Membre

Re : Aide en PL/PostgreSQL

Bonjour…

Créez une nouvelle discussion, pour un nouveau problème. Dans la bonne rubrique si possible.


Marc.

Hors ligne

#8 09/11/2010 14:38:16

jila_clack
Membre

Re : Aide en PL/PostgreSQL

et comment on le fait ?

Hors ligne

#9 09/11/2010 14:45:59

jila_clack
Membre

Re : Aide en PL/PostgreSQL

ou est ce qu'on creer une nouvelle discusion ??///

Hors ligne

#10 09/11/2010 14:57:48

Marc Cousin
Membre

Re : Aide en PL/PostgreSQL

On va dans Index, puis technique/général, puis en haut à droite, on clique sur nouvelle discussion.


Marc.

Hors ligne

#11 09/11/2010 15:33:23

jila_clack
Membre

Re : Aide en PL/PostgreSQL

merciii!!!!!!!!

Hors ligne

Pied de page des forums