首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动递增postgresql表中3列复合主键的一列

自动递增postgresql表中3列复合主键的一列
EN

Stack Overflow用户
提问于 2020-05-20 16:09:39
回答 1查看 1.4K关注 0票数 2

我在PostgreSql数据库的表中有三列作为复合主键。两列的数据将在insert查询中提供。但每次插入时,必须增加另一列。下面是一个例子:

代码语言:javascript
复制
CREATE TABLE "food_index_directory" (
  "primary_key_one"          VARCHAR(6) NOT NULL,
  "primary_key_two"          NUMERIC(4) NOT NULL,
  "primary_key_three"        NUMERIC(5) NOT NULL,
  "varchar_column_one"       VARCHAR(30) NOT NULL,
  "numeric_column_one"       INTEGER NOT NULL,
  "numeric_column_two"       NUMERIC(12,9) DEFAULT .001 NOT NULL,
  "numeric_column_three"     NUMERIC(5,2),
  "last_upd_date"            DATE NOT NULL,
CONSTRAINT "PK_dummy_table" PRIMARY KEY ("primary_key_one","primary_key_two","primary_key_three")
);

如前所述,两个主键列和另一个主键列(primary_key_three)的数据必须根据第一和第二键列出现的次数增加。第二键列只能接受1到12之间的值,第三列是第二列的计数列。

例:

代码语言:javascript
复制
primary_key_one primary_key_two primary_key_three     ......
91                    1            1                 ......
91                    1            2                 ......
 91                    2            1                 ......
 91                    2            2                 ......
91                    1            3                 ......
 91                    2            3                 ......
  91                    3            1                 ......
 91                    2            4                 ......
  34                    3            1                 ......
91                    1            4                 ......
    91                   4            1                 ......
     91                   5            1                 ......
    34                   4            1                 ......

在上面的示例中,(为了更好地理解,当前两列中的数据被重复时),第三列计数在这个表中重复前两列的次数。

在插入期间,我将为前两列提供数据,而第三列必须像上面所示和解释的那样自动递增?我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-20 17:15:12

找出程序

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION "fn_trig_pk"()
  RETURNS "pg_catalog"."trigger" AS $BODY$ 
begin
new.primary_key_three = (select count(*)+1 from food_index_directory where primary_key_one=new.primary_key_one and primary_key_two=new.primary_key_two );
return NEW;
end;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

并触发你的桌子

代码语言:javascript
复制
CREATE TRIGGER trig_pk
  BEFORE insert 
  ON food_index_directory
  FOR EACH ROW
  EXECUTE PROCEDURE fn_trig_pk();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61917751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档