我在PostgreSql数据库表中有三列作为复合主键。在插入查询中将提供两列的数据。但是,每次插入时,必须增加另一列。这是一个示例:
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_food_index_directory" 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 ......
在上面的示例中,(为了更好地理解,当重复前两列的数据时,我留了一些空格,第三列计算该表中前两列重复的次数。
在插入过程中,我将为前两列提供数据,而第三列必须如上所述自动增加?我该怎么做?
查找步骤
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();