Comment est-il possible d'obtenir la valeur de séquence actuelle dans postgresql 8.4?
Remarque: j'ai besoin de la valeur d'une sorte de statistique, il suffit de récupérer et de stocker. Rien lié à la concurrence et aux conditions de concurrence en cas d'incrémentation manuelle n'est pas pertinent pour la question.
Remarque 2: la séquence est partagée entre plusieurs tables
Remarque 3: currval
ne fonctionnera pas à cause de:
ERROR: currval of sequence "<sequence name>" is not yet defined in this session
Mon idée actuelle est d'analyser DDL, ce qui est bizarre
Vous pouvez utiliser:
SELECT last_value FROM sequence_name;
Mise à jour : ceci est documenté dans l'instruction CREATE SEQUENCE :
Bien que vous ne puissiez pas mettre à jour une séquence directement, vous pouvez utiliser une requête comme:
SELECT * FROM nom;
pour examiner les paramètres et l'état actuel d'une séquence. En particulier, le champ last_value de la séquence affiche la dernière valeur allouée par une session. (Bien sûr, cette valeur peut être obsolète au moment de son impression, si d'autres sessions effectuent activement des appels nextval.)
Si la séquence est utilisée pour des identifiants uniques dans une table, vous pouvez simplement le faire:
select max(id) from mytable;
Le moyen le plus efficace, bien que spécifique à PostgreSQL, est:
select currval('mysequence');
bien que techniquement cela retourne la dernière valeur générée par l'appel à nextval('mysequence')
, qui ne peut pas nécessairement être tilisée par l'appelant (et si inutilisée laisserait des espaces dans une colonne id d'incrémentation automatique) .