使用NEW创建触发器功能时出错

时间:2014-10-15 08:53:24

标签: sql postgresql plpgsql

我正在尝试为这样的触发器创建一个函数:

CREATE FUNCTION backup_largeobjects_grant()
RETURNS trigger AS $$
BEGIN
    GRANT SELECT ON LARGE OBJECT NEW.loid TO backup;
END; $$ 
LANGUAGE plpgsql;

但是当它到达NEW时,这会给我一个错误。

  

错误:语法错误在或接近" NEW"

我一直在寻找但不明白我做错了。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

看起来GRANT ... ON LARGE OBJECT语句无法参数化;对象ID需要显示为文字整数值。

您可以通过将语句构建为字符串来实现存储过程:

EXECUTE 'GRANT SELECT ON LARGE OBJECT ' || NEW.loid::text || ' TO backup';