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 04/06/2009 15:23:28

slash
Membre

Limiter nombre d'enregistrements/table ou taille de table

Bonjour,

Est il possible de limiter le nombre d'enregistrements que pourrait contenir une table? (sinon limiter la taille?)
Et si oui, écraser les plus anciens enregistrements lors de l'ajout d'un nouvel enregistrement ? (genre de buffer tournant)

Merci à vous!

Hors ligne

#2 04/06/2009 15:33:36

gleu
Administrateur

Re : Limiter nombre d'enregistrements/table ou taille de table

Pas directement. Mais tu dois pouvoir y arriver en ajoutant un trigger qui te gèrera ce comportement.


Guillaume.

Hors ligne

#3 04/06/2009 16:19:12

Marc Cousin
Membre

Re : Limiter nombre d'enregistrements/table ou taille de table

Mais attention à un trigger qui ferait des count(*) ... il risque de fortement ralentir l'appli, puisque full scan de la table à tous les coups.

En fait le problème, c'est qu'une table n'a pas 'un nombre d'enregistrements', puisque chaque session peut en voir un nombre différent, étant chacune à un niveau de transaction différent.

Ou alors, si ca n'est pas gênant, on peut faire une sérialisation des accès sur cette table, avec un compteur sur une autre table. Mais ça risque d'entraîner de forts problèmes de contention sur l'appli qui serait derrière. Donc difficile de répondre avant d'en savoir plus.

A quoi va servir la table ?


Marc.

Hors ligne

#4 04/06/2009 18:03:39

slash
Membre

Re : Limiter nombre d'enregistrements/table ou taille de table

la table logge des évènements, et devrait contenir au maximum 2000 enregistrements. Pour le moment j'ai fait un trigger, qui a partir de 2000 enregistrements, supprime le plus vieux et ajoute le nouveau.
Je ne constate pas encore de gros ralentissement, mais j'imagine le jour ou on demande d'avoir la possibilité d'avoir 100000 enregistrements, là je pense qu'il y aura problème.

Hors ligne

#5 04/06/2009 18:12:49

gleu
Administrateur

Re : Limiter nombre d'enregistrements/table ou taille de table

À priori, ça n'a pas besoin d'être très précis, donc la solution par trigger devrait fonctionner.

Cela étant, je ne vois pas l'intérêt de bloquer à 2000 (ou à tout autre nombre). Quel est le but ? gagner en espace disque ? en performance ?


Guillaume.

Hors ligne

#6 04/06/2009 18:17:13

slash
Membre

Re : Limiter nombre d'enregistrements/table ou taille de table

pas du tout, c'est une limite que nous nous sommes imposée délibérément smile
en tout cas merci pour vos réponses!

Hors ligne

#7 04/06/2009 18:39:00

Marc Cousin
Membre

Re : Limiter nombre d'enregistrements/table ou taille de table

Si le but c'est juste d'éviter que la table ne grossisse trop, il vaut mieux faire un delete à intervalle régulier que de pénaliser les insertions 'normales' dans la table.

Dernière modification par Marc Cousin (04/06/2009 18:47:23)


Marc.

Hors ligne

#8 05/06/2009 08:57:25

slash
Membre

Re : Limiter nombre d'enregistrements/table ou taille de table

Oui mais on ne veut perdre aucune information si aucun insert n'arrive. On souhaite avoir le meme principe qu'un buffer tournant...

Hors ligne

#9 05/06/2009 09:53:18

Marc Cousin
Membre

Re : Limiter nombre d'enregistrements/table ou taille de table

Bien sûr. On peut donc imaginer avoir une requête qui se lance par exemple une fois par minute et qui supprime tous les enregistrements sauf les 2000 derniers.
Le seul défaut que je vois à cette solution, c'est si on a une volumétrie très élevée sur une période très courte, le buffer grossira anormalement, mais de façon très temporaire. L'avantage étant vraiment avec cette méthode que les insertions seront bien plus performantes que de lancer un trigger lourd à chaque fois.


Marc.

Hors ligne

#10 05/06/2009 10:32:39

slash
Membre

Re : Limiter nombre d'enregistrements/table ou taille de table

on peut régler des requêtes périodiques?

Hors ligne

#11 05/06/2009 10:38:44

gleu
Administrateur

Re : Limiter nombre d'enregistrements/table ou taille de table

Oui, avec cron sous Unix ou les tâches planifiées sous Windows.


Guillaume.

Hors ligne

#12 05/06/2009 10:49:05

slash
Membre

Re : Limiter nombre d'enregistrements/table ou taille de table

Hm, je suis sous un Windows XP Embedded et ce module n'a pas été implémenté...
Il n'y a pas de fonction interne a PostGreSQL capable de faire çà d'une façon ou d'une autre, sans passer par une configuration Windows?

Hors ligne

#13 05/06/2009 11:21:35

gleu
Administrateur

Re : Limiter nombre d'enregistrements/table ou taille de table

Il n'y a pas de fonction interne a PostGreSQL capable de faire çà d'une façon ou d'une autre, sans passer par une configuration Windows?

Non.


Guillaume.

Hors ligne

#14 05/06/2009 11:28:20

slash
Membre

Re : Limiter nombre d'enregistrements/table ou taille de table

oki oki! bon bah on va rester sur le bon gros trigger alors ;-)
Merci encore gleu!

Hors ligne

Pied de page des forums