是否有一种简单(即非hacky)和无竞争条件的方法来在PostgreSQL中创建分区序列。例如:
在问题中使用正常序列:
| Project_ID | Issue |
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
| 2 | 4 |
在问题中使用分区序列:
| Project_ID | Issue |
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 2 |
答案 0 :(得分:2)
我不相信有一种简单的方法就像常规序列一样简单,因为:
nextval('myseq')
;但它不能引用其他列来通知函数该值应该来自哪个流。你可以创造有用的东西,但你可能不会认为它很简单。依次解决上述问题:
multiseq (partition_id, next_val)
。编写一个multinextval(seq_table, partition_id)
函数,执行以下操作:
seq_table
中提到的表格。partition_id
的行。 (如果没有,则插入值为2的新行。)在您的项目表上创建一个插入触发器,该插件使用对multinextval('projects_table', NEW.Project_ID)
的调用进行插入。
我自己没有使用过整个计划,但我已经尝试过类似于每个步骤的内容。如果您想尝试此操作,可以提供multinextval
函数和触发器的示例...