gpt4 book ai didi

postgresql - 在postgres中获取主键序列号

转载 作者:行者123 更新时间:2023-11-29 12:09:39 25 4
gpt4 key购买 nike

我们有一个表,我们在其中向我们的消费者公开一个 ShortID,该表生成一个类似 Youtube 的标识符(很大程度上受 this SO post 启发)。我们使用行的主 KEY 来生成它(在 View 中)。例如

SELECT title,description,imageuri,generateseoid(id)as seo FROM broadcastimage WHERE...

generateseoid 函数本质上是执行 stringify_bigint 调用(来自上面的 SO 答案)并进行了一些小的更改。

我们需要在插入时执行此操作。像这样获取值是否安全:

generateseoid(currval(pg_get_serial_sequence('broadcastimage', 'id')))

在插入调用中?我们有很多线程(通过 AWS 中的 SQS 队列)将记录插入广播流表。我有点担心使用多个 postgres 连接时,我们会生成相同的序列号。该列上有一个 UNIQUE CONSTRAINT。

另一种方法是向它添加另一个 random() 数字吗?

编辑:

这是一个测试 nextval 与 currval 的简单示例:

CREATE TABLE test (
id serial PRIMARY KEY,
text text
)
insert into test (text) VALUES ('test ' || nextval(pg_get_serial_sequence('test ', 'id')))
insert into test (text) VALUES ('test ' || currval(pg_get_serial_sequence('test ', 'id')))

select * From test

结果指向:

1 | test 2
3 | test 3

最佳答案

Postgres 每次都会为序列生成新的 id。您可能会因回滚等原因在序列中出现间隙,但如果这不重要,那么您应该可以继续了。

您应该使用 nextval 来获取新值。 currval 报告最后生成的值。

序列文档。 https://www.postgresql.org/docs/current/static/sql-createsequence.html

关于postgresql - 在postgres中获取主键序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43345882/

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