gpt4 book ai didi

postgresql - PostgreSQL 穷尽一个序列时的错误类型是什么?

转载 作者:行者123 更新时间:2023-11-29 12:37:47 24 4
gpt4 key购买 nike

我想使用 PostgreSQL 序列在我的数据库中生成主键。它不是一个大序列,而是分成小块(关键序列)(这与客户端离线工作并稍后同步他们的工作有关)。

我已经编写了一个表,其中包含下一个要发布的 key 序列,以及一个将发布新序列并更新 key 序列的函数。如果尚未设置主键,我现在正在创建触发器以将主键附加到插入的行。

当键序列用完时如何捕获? 我需要捕获什么异常?我想做这样的事情:

create or replace function generate_key() returns trigger as
$$
begin
if new._id is null then
begin
new._id = nextval(key_sequence);
exception when SEQUENCE_EXHAUSTED then
perform update_key_sequence();
new._id = nextval(key_sequence);
end;
end if;
return new;
end;
$$
language plpgsql;

我用谷歌搜索失败并尝试了一个迷你序列,但所做的只是给出了一个不明确的“错误”

最佳答案

通过从 64 位有符号整数的最大值开始一个序列来测试这一点非常容易:

regress=> CREATE SEQUENCE xx START WITH 9223372036854775807;
CREATE SEQUENCE
regress=> \set verbosity verbose
regress=> SELECT nextval('xx');
nextval
---------------------
9223372036854775807
(1 row)
regress=> SELECT nextval('xx');
ERROR: 55000: nextval: reached maximum value of sequence "xx" (9223372036854775807)
LOCATION: nextval_internal, sequence.c:644

所以,SQLSTATE 55000,which is object_not_in_prerequisite_state .也许不是世界上最有用的错误。

序列的显式 MAXVALUE 引发了同样的错误,同样很容易测试。

关于postgresql - PostgreSQL 穷尽一个序列时的错误类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22839634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com