我有一个spring-boot-data-jpa
应用程序,其中包含这样的PostgreSQL
表:
| 对象标识|文件名| document_name |
| --|--| ------------ |
| 一个|file1_for_obj_1| file1_for_obj_1 |
| 二个|file1_for_obj_2| file1_for_obj_2 |
| 一个|file2_for_obj_1| file2_for_obj_1 |
| 一个|file3_for_obj_1| file3_for_obj_1 |
| 二个|file2_for_obj_2| file2_for_obj_2 |
我需要添加一列number
,这将是序列号,并将考虑object_id
列的值。也就是说,这个想法是与一个或另一个object_id
相关的行的编号。
因此,该表应如下所示:
| 对象标识|文件名|数字,号码| number |
| --|--|--| ------------ |
| 一个|file1_for_obj_1|一个| 1 |
| 二个|file1_for_obj_2|一个| 1 |
| 一个|file2_for_obj_1|二个| 2 |
| 一个|file3_for_obj_1|三个| 3 |
| 二个|file2_for_obj_2|二个| 2 |
我的第一个想法是创建一个可以生成新值的序列。例如,像这样:
CREATE SEQUENCE _document_sequence
MINVALUE 1
START WITH 1000
INCREMENT BY 1
字符串
但在这种情况下,它不会考虑object_id
列的值。也就是说,可能应该用java代码生成。此外,我需要进行一次迁移,将新列number
的值放入现有行。但我不知道如何最有效地做到这一点。
1条答案
按热度按时间eit6fx6z1#
你不能有效地或有效率地做你想做的事情。您需要为 * 每个对象id* 创建一个序列(10K id然后10K序列),序列中会有间隙。或者,您可以使用
MAX()+1
方法,但这实际上保证了最终的副本。最简单的方法是创建一个view
并在其中生成number
。(参见Demo)字符串