gpt4 book ai didi

postgresql - 如何为 postgresql 序列指定值列表

转载 作者:行者123 更新时间:2023-11-29 13:06:51 26 4
gpt4 key购买 nike

我有一个整数值列表 X,我希望我的表 Y 的主键来自该整数值列表。我想知道这是否可以使用序列来完成。换句话说:有没有办法告诉 PostgreSQL 序列使用此列表 X 为我的表 Y 生成主键?

这样做的一种方法是使用一个序列,该序列包含列表 X 中最后使用的整数的索引,对该序列调用 setval(),获取下一个值并尝试将其插入到我的表 Y 中。在并发请求的情况下会出现错误,在这种情况下,我需要尝试使用列表 X 中的下一个值。我想知道还有哪些(更好的)方法可以实现我的目标。

最佳答案

可以这样工作:

-- DROP SCHEMA x CASCADE;
CREATE SCHEMA x;
CREATE TABLE x.priv_id(seq_id int primary key, id int);

INSERT INTO x.priv_id
SELECT generate_series(1,100,1), (random() * 1000)::int;

CREATE SEQUENCE x.priv_seq;

SELECT id
FROM x.priv_id
WHERE seq_id = (SELECT nextval('x.priv_seq'));

要点:

1) 创建一个包含两个数字的查找表
- seq_id 从 1 和您的主键开始计数。
- id 是你的序列号(我在这里替换了随机数)。
2) 创建辅助序列。
3) 使用上面的 SELECT 获取您的号码。
您需要子选择,否则将立即返回所有值。

此解决方案提供所有安全性 nextval()必须提供并发。
如果您想确保您的自定义 ID 是唯一的,请在 priv_id(id) 上创建一个唯一索引。

关于postgresql - 如何为 postgresql 序列指定值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7791896/

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