【发布时间】:2017-10-01 03:24:55
【问题描述】:
我必须在 postgres 中写一个触发器 触发器应该在 rp_resourceUser 表中插入值。
我有三个表 rp_user、rp_resourceUser、rp_resourceType 它们都在公共模式下
fields in rp_user
user_id bigint NOT NULL,
is_gtl boolean,
is_tsc_admin boolean,
username character varying(255) NOT NULL,
gtl_user_id bigint,
fields in rp_resource_type
resource_type_id bigint NOT NULL,
resource_template text,
resource_type character varying(255),
fields in rp_resource_user_type
resource_user_type_id bigint NOT NULL,
gtl_user_id bigint NOT NULL,
resource_type_id bigint NOT NULL,
user_id bigint NOT NULL,
CONSTRAINT rp_resource_user_type_pkey PRIMARY KEY (resource_user_type_id),
CONSTRAINT fk6t2cd10tfar76hvvchyo81u66 FOREIGN KEY (user_id)
REFERENCES public.rp_user (user_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fkb273dt5c7b9s49jlwf1cmbxib FOREIGN KEY (gtl_user_id)
REFERENCES public.rp_user (user_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fkmbxelxexffw96mcgcu3y25ixl FOREIGN KEY (resource_type_id)
REFERENCES public.rp_resource_type (resource_type_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT uk994khkskqm5c77mlyipwxu0dv UNIQUE (user_id, gtl_user_id, resource_type_id)
所以触发器的条件是当用户表中的 gtl 标志被设置而不是在 rp_resource_user_type 中插入值时
我写过类似的东西
CREATE TRIGGER gtlPermission AFTER UPDATE ON rp_user.is_gtl
FOR EACH ROW
WHEN (public.rp_user.is_gtl IS true)
EXECUTE PROCEDURE setGtlPermission();
Create or Replace Function setGtlPsermission () RETURNS TRIGGER AS $rp_resource_user_type$
BEGIN
INSERT INTO rp_resource_user_type(resource_user_type_id, gtl_user_id, resource_type_id,user_id)
VALUES (new.resource_user_type_id, rp_user.gtl_user_id, rp_resource_type.resource_type_id ,rp_user.user_id);
RETURN NEW;
END;
$rp_resource_user_type$ LANGUAGE plpgsql;
我以前从未写过触发器,所以我什至不知道那是否正确..所以需要建议
【问题讨论】:
-
这里有一个教程:postgresqltutorial.com/introduction-postgresql-trigger 有帮助吗?
标签: database postgresql triggers postgresql-9.1