PostgreSQL根据另一列的值作为范围自动递增列。

10
在PostgreSQL中,我们可以将列定义为SERIAL,以便在插入查询时自动递增它。

这个自动递增能否通过限定到另一个列值来实现?

我将通过以下示例解释我的问题。
在多租户SaaS应用程序中,可能存在这样一种情况,即我们需要按用户帐户递增列(例如items表中的item_id列)。

示例:items表

item_id | account_id

100 | 1

101 | 1

102 | 1

100 | 2

对于表格的糟糕格式化表示抱歉。我希望您对基本结构有所了解。

在上面的示例中,只要新帐户(例如帐户2)创建新项目,item_id序列计数就应重新开始,即从100开始。
如果帐户1中的用户删除item_id 102并创建新的项目记录,则item_id应设置为103等。
我试图找到一个解决方案,但我无法通过Google搜索获得指针。因此,任何帮助都将不胜感激! PS:我知道可以从后端代码处理此问题,但我更想知道数据库是否有解决方案。

2
你找到了合适的解决方案吗?我有类似的问题。 - devnull Ψ
1个回答

3

你不能将SERIAL定义为基于其他列进行分区。但是你可以使用ROW_NUMBER()函数。如果你不需要该值被实现,你可以编写类似以下的代码:

CREATE VIEW v_item_table
AS
SELECT *, 
 ROW_NUMBER() OVER(PARTITION BY item_id ORDER BY some_timestamp_col) AS account_id
FROM item_table;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接