【发布时间】:2015-06-20 19:11:12
【问题描述】:
是否可以配置 Postgres 数据库,使得特定列只能由触发器更新,同时仍允许触发器本身执行以响应角色的更新,而无需更新该列?如果有,怎么做?
例如,给定表和触发器如下:
CREATE TABLE a(
id serial PRIMARY KEY,
flag boolean NOT NULL DEFAULT TRUE,
data text NOT NULL
);
CREATE TABLE b(
id serial PRIMARY KEY,
updated_on DATE NOT NULL DEFAULT CURRENT_DATE,
a_id INTEGER NOT NULL,
FOREIGN KEY (a_id) references a(id)
);
CREATE FUNCTION update_aflag() RETURNS trigger AS $update_aflag$
BEGIN
UPDATE a
SET flag = FALSE
WHERE id = NEW.a_id;
RETURN NEW;
END;
$update_aflag$ LANGUAGE plpgsql;
CREATE TRIGGER update_aflag_trigger
AFTER INSERT ON b
FOR EACH ROW
EXECUTE PROCEDURE update_aflag()
;
我想定义一个角色,没有有权使用UPDATE 语句直接更新a.flag,但可以更新flag间接通过触发器。
【问题讨论】:
标签: postgresql triggers permissions