如何在向表中插入新行时调用postgresql序列?
我想执行类似于以下操作:
insert into biz_term(
biz_term_id,
biz_term_name,
)
values(SELECT nextval(idsequence)',
'temp'
);
我的目的是想在往 biz_term
表中插入新记录时直接调用序列 idsequence
,请问如何调用?
如何在向表中插入新行时调用postgresql序列?
我想执行类似于以下操作:
insert into biz_term(
biz_term_id,
biz_term_name,
)
values(SELECT nextval(idsequence)',
'temp'
);
我的目的是想在往 biz_term
表中插入新记录时直接调用序列 idsequence
,请问如何调用?
你基本上已经做到了。你不需要在里面加上SELECT:
insert into biz_term(
biz_term_id,
biz_term_name,
)
values(
nextval('idsequence'),
'temp'
);
为什么您没有将指定为serial
(或bigserial
),这样可以自动处理?
BIGINT
而不是 BIGSERIAL
的好理由,那就是如果你正在使用 Hibernate。以下是文章:发布一个答案,因为我还没有资格发表评论 :/。提前道歉,如果您觉得不合适的话。使用 SEQUENCE 生成器是一个更好的替代方案,因为可以在执行 INSERT 语句之前生成标识符。
bigserial
使用序列来生成值。 - user330315bigserial
与使用identity(auto_increment)相同,关于Hibernate也是如此。因此,建议在数据库中使用big int
,并在Hibernate中使用生成器并使用“true”序列。我留下了一个链接,你可能更好地理解我的意思。 - constantine-dnextval()
,但我猜这对于一个混淆层来说太过苛求了。使用(本地)序列比混淆层自己实现的任何东西都更有效、可扩展和并发安全。 - user330315