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 Re : Général » Gerer un compteur du nombre de select par jour et par ligne » 05/07/2012 11:58:09

Pour le coder en PHP j'aurais besoin d'utiliser une zone memoire, genre memcached ou autre pour stocker les compteurs par ligne et régulierement mettre à jour les compteurs en base.
Un peu plus complexe mais surement plus efficace que faire des UPDATE/INSERT à chaque select pour incrémenter le compteur...

kenrio a écrit :

Je suis pas sur qu'on puisse, pg_stat_user_tables ne permet de voir que le nombre de lignes insert, update et delete.
Après y a peut etre un autre moyen par postgres.

Perso je l'aurais codé en php, rajouter un compteur sur les selects initiés est plus simple je trouve.

#2 Général » Gerer un compteur du nombre de select par jour et par ligne » 05/07/2012 10:57:56

gglamenace
Réponses : 4

Bonjour,

je voudrais ajouter un champ dans une table qui compte le nombre de SELECT par jour pour chaque ligne.
Auriez-vous une methode permettant de faire ceci sans écrouler les performances?
Il y aura en effet un grand nombre de SELECT pour chaque ligne par jour, et donc la gestion du compteur devra être optimisée.

Merci d'avance pour vos réponses!

Jérôme

#3 Re : Général » INSERT et accès concurrentiel » 04/07/2012 18:12:23

Merci pour vos réponses,
je vais effectivement ne pas stocker la valeur en base64 et la calculer à la voler!



flo a écrit :

Personnellement, je pense que tout cela est bien compliqué et surtout je ne comprends absolument pas votre besoin de "convertir" l'index en base64, et de le stocker. Si l'index_base64 est calculé à partir de l'index, il vaut mieux ne pas stocker les 2 (vous n'êtes pas en première forme normale dans ce cas...)
Pourriez-vous expliquer ce que vous voulez faire réellement? À quoi sert tout ce micmac?

#4 Re : Général » INSERT et accès concurrentiel » 02/07/2012 23:45:20

J'ai aussi pensé à utilisé now pour le champ index qui me donne date et heure avec les microsecondes et utiliser la date/heure et le convertir en base64.
Qu'en pensez-vous?

#5 Re : Général » INSERT et accès concurrentiel » 02/07/2012 23:25:47

J'ai une table avec 3 champs:
index (entier auto incrémenté)
index_base64 varchar(10)
URL varchar(200)
je voudrais à chaque INSERT que le champ index soit auto incrémenté par POSTGRESQL, que je remplisse le champ URL et que le champ index_base64 soit calculé en prenant index et en le transposant en base64.

Quelle serait selon vous la meilleur solution?

Merci d'avance pour votre aide.

Jérôme

#6 Re : Général » INSERT et accès concurrentiel » 02/07/2012 15:42:28

gleu a écrit :

Utilisez une séquence, c'est fait pour ça. Voir http://docs.postgresql.fr/9.1/sql-createsequence.html pour les détails.

Bonjour,

j'avais pensé utiliser les sequences pour que ce soit POSTGRESQL qui me fournisse la valeur calculée en automatique, mais avec les sequences on ne peut générer que des nombres.
Dans mon cas je veux remplir un champ en convertissant l'index de la ligne en base64.
J'ai trouvé ceci comme doc pour utiliser du PL/SQL en tant que trigger:
http://www.postgresql.org/docs/9.1/inte … igger.html

Je pense que le trigger AFTER INSERT et l'utilisation de l'objet NEW pour avoir récupérer la valeur de l'index et pouvoir faire un update du champ dans lequel je stocke en base64 l'index me permettra de garder la cohérence entre l'index et le champ contenant l'index en base64.

Ca fait malheureusement un INSERT puis un UPDATE, mais je ne vois pas d'autre solution.

Qu'en pensez-vous?


Jérôme

#7 Général » INSERT et accès concurrentiel » 02/07/2012 12:48:42

gglamenace
Réponses : 9

Bonjour,

je désire faire un insert à partir d'une procédure stockée en récupérant le dernier index de ligne de la table (champ auto incrémenté), l'incrémenter de 1 et utiliser ce nombre pour remplir un autre champ.
Si tout se passe bien POSTGRESQL fera l'insert en incrémentant de lui-meme l'index et du coup le champ calculé à partir de l'index sera cohérent.

Mon problème est que je ne suis pas certain qu'entre le moment où je récupère le dernier index et le moment où je fais l'INSERT, un autre INSERT n'aura pas déjà incrémenté l'index et donc l'INSERT que je fais dans ma procédure produira une ligne avec un index qui n'est pas celui utilisé pour remplir un autre champ.

Pouvez-vous me donner la bonne pratique pour ne pas avoir ce genre de problème?
Je ne sais pas si je peux utiliser un TRIGGER AFTER ou autre.

Si vous pouvez m'éclairer...

Merci
Jérôme

Pied de page des forums

Propulsé par FluxBB