【问题标题】:PostgreSQL auto increment column by scope of another column valuePostgreSQL按另一列值的范围自动增加列
【发布时间】:2019-02-07 10:04:45
【问题描述】:

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

【问题讨论】:

    标签: postgresql auto-increment


    【解决方案1】:

    您不能将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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 2017-09-30
      • 2022-01-20
      • 2013-05-18
      相关资源
      最近更新 更多