我在PostgreSql数据库的表中有三列作为复合主键。两列的数据将在insert查询中提供。但每次插入时,必须增加另一列。下面是一个例子:
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之间的值,第三列是第二列的计数列。
例:
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 ......在上面的示例中,(为了更好地理解,当前两列中的数据被重复时),第三列计数在这个表中重复前两列的次数。
在插入期间,我将为前两列提供数据,而第三列必须像上面所示和解释的那样自动递增?我该怎么做?
发布于 2020-05-20 17:15:12
找出程序
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并触发你的桌子
CREATE TRIGGER trig_pk
BEFORE insert
ON food_index_directory
FOR EACH ROW
EXECUTE PROCEDURE fn_trig_pk();https://stackoverflow.com/questions/61917751
复制相似问题