gpt4 book ai didi

sql - 是否可以在每个唱片标签上使用 PG 序列?

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

PostgreSQL 9.2+ 是否提供任何功能来生成命名空间为特定值的序列?例如:

 .. | user_id | seq_id | body | ...
----------------------------------
- | 4 | 1 | "abc...."
- | 4 | 2 | "def...."
- | 5 | 1 | "ghi...."
- | 5 | 2 | "xyz...."
- | 5 | 3 | "123...."

这对于为用户生成自定义 url 很有用:

domain.me/username_4/posts/1    
domain.me/username_4/posts/2

domain.me/username_5/posts/1
domain.me/username_5/posts/2
domain.me/username_5/posts/3

我没有在 PG 文档(关于序列和序列函数)中找到任何可以执行此操作的内容。 INSERT 语句中的子查询或带有自定义 PG 函数的子查询是仅有的其他选项吗?

最佳答案

您可以在 INSERT 语句中使用子查询,例如 @Clodoaldo demonstrates .然而,这违背了序列在并发事务中安全使用的本质,它会导致竞争条件并最终导致重复 key 违规。

您应该重新考虑您的方法。只需一个简单的表格序列,并将其与 user_id 组合以获得您想要的排序顺序。

您始终可以使用 row_number() 和一个简单的查询来生成具有所需数字的自定义 URL,例如:

SELECT format('domain.me/username_%s/posts/%s'
, user_id
, row_number() OVER (PARTITION BY user_id ORDER BY seq_id)
)
FROM tbl;

db<> fiddle here
<子>旧sqlfiddle

关于sql - 是否可以在每个唱片标签上使用 PG 序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16464903/

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