PostgreSQL自动按另一列值的范围递增列

时间:2018-09-01 19:01:04

标签: postgresql auto-increment

在PostgreSQL中,我们可以将列定义为 SERIAL 以通过插入查询自动对其进行递增。

  

可以通过将范围限定到另一个列值来实现这种自动递增吗?

我将通过以下示例解释我的问题。

在多租户SaaS应用程序中,可能存在以下情况:我们可能需要为每个用户帐户增加一列(例如,项目表中的item_id列)。

示例:项目表

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::我知道可以通过后端代码来处理,但是我很想知道数据库是否对此有解决方案。

1 个答案:

答案 0 :(得分:0)

您无法定义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;