提问人:NeverSleeps 提问时间:8/2/2023 最后编辑:halferNeverSleeps 更新时间:8/5/2023 访问量:46
基于另一列的序列列 (PostgreSQL)
Sequence column based on another column (PostgreSQL)
问:
我有带有此PostgreSQL表的Spring Data - JPA应用程序:
编号 | object_id | document_name |
---|---|---|
BDC8B35B型 | 1 | file1_for_obj_1 |
EA4746抗体 | 2 | file1_for_obj_2 |
CD4F235C | 1 | file2_for_obj_1 |
2天7天5AF9 | 1 | file3_for_obj_1 |
邮箱:e85824021 | 2 | file2_for_obj_2 |
我需要添加一列,该列将是序列号,并将考虑列的值。也就是说,这个想法是与一个或另一个相关的行的编号。number
object_id
object_id
因此,该表应如下所示:
编号 | object_id | document_name | 数 |
---|---|---|---|
BDC8B35B型 | 1 | file1_for_obj_1 | 1 |
EA4746抗体 | 2 | file1_for_obj_2 | 1 |
CD4F235C | 1 | file2_for_obj_1 | 2 |
2天7天5AF9 | 1 | file3_for_obj_1 | 3 |
邮箱:e85824021 | 2 | file2_for_obj_2 | 2 |
我的第一个想法是创建一个能够产生新值的序列。例如,像这样:
CREATE SEQUENCE _document_sequence
MINVALUE 1
START WITH 1000
INCREMENT BY 1
但在这种情况下,它不会考虑列的值。也就是说,生成可能应该在 java 代码中。此外,我需要进行迁移,以降低现有行的新列的值。但我不知道如何最有效地做到这一点。object_id
number
答:
0赞
Belayer
8/3/2023
#1
你无法有效地或有效地做你想做的事。您需要为每个对象 id(先 10K ids 然后 10K 序列)创建一个序列,并且序列中会有间隙。或者,您可以使用一种方法,但这实际上保证了最终的重复。通过创建一个并生成内部来获得您想要的东西的最简单方法。(见演示MAX()+1
view
number
)
create view <view name> as
select t.*
, row_number() over(partition by object_id
order by document_name
) as number
from <table name> t;
评论