【发布时间】:2015-12-20 19:14:22
【问题描述】:
我想创建一个触发器,当包含视图名称的行从表中删除时删除视图。
考虑下表,查看。
CREATE TABLE views
(
id serial NOT NULL,
name character varying(128) NOT NULL
CONSTRAINT views_pkey PRIMARY KEY (id),
CONSTRAINT views_name_unique UNIQUE (name)
);
CREATE OR REPLACE VIEW test AS
SELECT * FROM views;
INSERT INTO views (name) VALUES('test');
我创建触发器以从表 views 删除视图:
CREATE OR REPLACE FUNCTION drop_view()
RETURNS trigger AS
$BODY$
DECLARE
viewname varchar(128);
BEGIN
viewname := OLD.name;
DROP VIEW IF EXISTS viewname;
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION drop_spatial_view()
OWNER TO postgres;
CREATE TRIGGER del
AFTER DELETE
ON views
FOR EACH ROW
EXECUTE PROCEDURE drop_view();
当我从views 中删除行时,我得到一个错误:
DELETE FROM views WHERE name = 'test';
NOTICE: view "viewname" does not exist, skipping
CONTEXT: SQL statement "DROP VIEW IF EXISTS viewname"
似乎将值test 分配给变量viewname 存在问题。如何重写触发器使其工作?
【问题讨论】:
-
@lad2025,它是这样工作的,谢谢!
标签: postgresql triggers