From: | Jean-Paul ARGUDO <jean-paul(at)argudo(dot)org> |
---|---|
To: | Stéphane Dupuy <sdupuy(at)hducros(dot)fr> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Tables archivées |
Date: | 2005-01-04 11:14:38 |
Message-ID: | 200501041214.39416.jean-paul@argudo.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
> j'ai une table "expéditions" qui grossit de jour en jour et que je
> souhaiterais "archiver", chaque année, pour limiter la taille de la base en
> conservant, par exemple, tous les index sur l'année courante et l'année
> passée, et n'avoir qu'un seul index de recherche sur les années
> antérieures. J'aurais ainsi des tables "exped2005", "exped2004",
> "exped2003"...
Solution basée sur une vue (il doit y en avoir des plus futées, pas trop le
temps de chercher):
Créer une table par an:
create table exped2003 as
select *
from expeditions
where expedition_date between to_date('01/01/2003','DD/MM/YYYY')
and to_date('31/12/2003','DD/MM/YYYY');
optionnel : create index (qui va bien sur la table ci-dessus...);
idem pour années suivantes: s/2003/2004/g ...
Créer une vue pour une sélection sur toutes les tables:
create vue expeditions_toutes
as
select * from exped2003
union
select * from exped2004
union
...;
Requêter sur la vue expeditions_toutes qui aggrège par un UNION les données de
doutes les tables. (cf UNION ALL si doublons possibles et qu'on veut les
garder)
--
Jean-Paul Argudo
From | Date | Subject | |
---|---|---|---|
Next Message | philippe L | 2005-01-04 11:44:16 | Re: Bonne Année 2005! |
Previous Message | Stéphane Dupuy | 2005-01-04 08:33:37 | Tables archivées |