使用PostgreSQL(8.x),我需要跳过一串序列号自动,例如在给出49999之后我希望下一个id为70000而不是50000
这样做的正确/最安全的方法是什么?
注意:我最初发布了一个非常相似的问题How can I forward a primary key sequence in Django safely?,但我觉得这必须在数据库级别完成(并发问题)......
答案 0 :(得分:1)
我相信我找到了一条路:
答案 1 :(得分:0)
您可以使用一个触发器,它在插入语句后检查序列的实际值,并将其更改为您想要的值。
我认为这个片段应该可以胜任
CREATE OR REPLACE FUNCTION change_sequence() RETURNS TRIGGER AS $change_sequence$
DECLARE
current_value INTEGER;
BEGIN
current_value := currval('your_sequence');
IF current_value = 49999 THEN
setval ('you_sequence', 70000, false);
END IF;
RETURN NULL;
END;
$change_sequence$ LANGUAGE plpgsql;
-- DROP TRIGGER check_pkey ON your_table;
CREATE TRIGGER check_pkey
AFTER INSERT ON your_table
EXECUTE PROCEDURE change_sequence();