作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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;
关于sql - 是否可以在每个唱片标签上使用 PG 序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16464903/
我是一名优秀的程序员,十分优秀!