From: | Jean-Paul Argudo <jean-paul(at)argudo(dot)org> |
---|---|
To: | Pierre Couderc <pierre(at)couderc(dot)cc> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: SQL pour trouver le premier libre? |
Date: | 2006-06-03 09:36:11 |
Message-ID: | 4481580B.9050803@argudo.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Bonjour Pierre,
S'il s'agit d'assigner un nouvel ID en remplissant des trous, alors peut
être vous accepterez ma solution, qui ne vas pas vous donner "le plus
petit de ceux qui n'existent pas" quand le trou est supérieur à 1 unité.
Je m'explique:
Soit la table nombres (a integer):
test2=> select a from nombres;
a
----
1
2
3
6
7
8
10
11
12
13
14
15
16
19
(14 lignes)
On remarque que le "plus petit disponible" est 4. La requête suivante
vous ramène 5 le premier coup, vous faites votre insert avec ID=5, elle
vous ramènera 4 le suivant. Si vous faites votre insert avec ID=4, elle
elle vous ramènera 9, et ainsi dessuite:
test2=> select a-1 as id_disponible from nombres where a-1>0 except
select a from nombres order by id_disponible limit 1;
id_disponible
---------------
5
(1 ligne)
Je n'ai pas trop le temps d'investiguer plus en avant, dites-moi si
c'est plus performant ou pas...
Une astuce à 2¢ donc :-)
Cordialement,
--
Jean-Paul Argudo
www.PostgreSQLFr.org
From | Date | Subject | |
---|---|---|---|
Next Message | Jean-Paul Argudo | 2006-06-03 09:38:00 | Re: SQL pour trouver le premier libre? |
Previous Message | Pierre Couderc | 2006-06-03 09:07:59 | SQL pour trouver le premier libre? |