【发布时间】:2015-03-18 09:48:53
【问题描述】:
我一直试图在网上找到这个,但我是 postgresql 的新手,我可能不太了解快速过滤掉搜索结果..
我已经声明了以下表格:
CREATE SEQUENCE country_id_seq;
CREATE TABLE country
(
id integer NOT NULL DEFAULT nextval('country_id_seq'),
name character varying(40) NOT NULL,
CONSTRAINT country_pkey PRIMARY KEY (id)
);
CREATE SEQUENCE user_id_seq;
CREATE TABLE user
(
id integer NOT NULL DEFAULT nextval('user_id_seq'),
first_name character varying(40) NOT NULL,
last_name character varying(40) NOT NULL,
country_id integer NOT NULL,
CONSTRAINT user_pkey PRIMARY KEY (id),
CONSTRAINT user_fk_country_id FOREIGN KEY (country_id)
REFERENCES country (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED
);
现在我想在USER 上创建一个触发器函数(例如出于目的),该函数会引发国家名称异常
CREATE FUNCTION trigger_user_deny() RETURNS trigger AS $$
BEGIN
RAISE EXCEPTION 'STUFF %', NEW.country_id.name;
RETURN NEW;
END
$$
LANGUAGE plpgsql;
CREATE TRIGGER trigger_user_deny_insert
BEFORE INSERT
ON customer
FOR EACH ROW
EXECUTE PROCEDURE trigger_user_deny();
所以基本上我的问题是:我该如何做类似NEW.country_id.name 的事情(这不起作用,目的是select country.name from country where id=NEW.country_id)?
【问题讨论】:
-
NEW.country_id.name 适合你吗?它不存在于桌子上。如果您打算从国家表中获取国家名称,则必须查询该表。
-
什么意思,桌子上不存在? country_id 是国家/地区表的 FK,国家/地区表具有名称。我认为该语句的目的对于表模式很清楚,但我可以详细说明,你是对的,对不起。
标签: postgresql function triggers foreign-keys