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