在PostgreSQL中,我们可以将列定义为SERIAL,以使用插入查询自动递增它。
通过确定另一个列值来实现这种自动增量吗?
我将用下面的例子解释我的问题。
在多租户SaaS应用程序中,可能存在我们可能需要按用户帐户增加列(例如,项目表中的item_id
列)的情况。
item_id |帐户ID
100 | 1
101 | 1
102 | 1
100 | 2
对不起表的格式错误。我希望你对基本结构有所了解。
在上面的例子中,一旦新项目由新帐户(比如帐户2)创建,item_id
序列计数应该从头开始,即100。
如果帐户1中的用户删除item_id
102并创建新项目记录,则item_id
应设置为103,依此类推。
我试图找到一个解决方案,但我无法使用谷歌搜索获得指针。所以任何帮助都将受到高度赞赏!
PS:我知道这可以从后端代码处理,但我更想知道数据库是否有解决方案。
您无法将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;