postgresql 分布式序列生成- Citus

gzjq41n4  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(119)

bounty还有49分钟到期。回答此问题可获得+50声望奖励。ManojAnavatti正在从信誉良好的来源处寻找答案。

我们使用sequence生成器来生成序列。例如:每次插入一行时,都会有一列使用sequence创建字符串,如R0001,R0002等。
我们希望为每个碎片重新启动此序列。我们正在根据组织表中的Org_Id进行分片。
例如:如果组织表中有两个ID为1、2的条目,角色表中有两个ID为1和2的条目,分别来自组织ID 1和组织ID 2,则角色表中第1行和第2行的RoleNumbers应为R0001和R0001。目前由于序列未发布,生成的序列为R0001和R0002。
Citus有解决上述问题的方法吗?

vnjpjtjt

vnjpjtjt1#

因此Citus是postgres的extension,这意味着它与postgresql共享并拥有大部分相同的代码;然而,它具有局限性。
具体来说,影响你的是,节点生成的序列将其节点ID插入到每个人的前面,所以如果你的节点ID是001和002,你将从我的阅读中得到001 R 0001和002 R 0001,你的序列至少需要大小为BIGINT。
话虽如此,你可以有两个工程arounds
1.您可以让客户机查询当前的id/count,并让客户机创建字段
1.你可以执行一个SQL命令来获取计数并生成一个新的ID,而不需要我现在理解的序列器。您希望向表中插入新行,并且如果对象中缺少特定字段,则希望自动添加一个值,该值表示表中的行数加1。
与此类似的东西

INSERT INTO your_table (field1, field2, field3)
VALUES ('value1', 'value2', COALESCE('value3', 'COUNT-' || (SELECT COUNT(*) + 1 FROM your_table)));

字符串

相关问题