是否可以使用变量来访问postgresql触发器中的记录列

时间:2010-09-14 10:08:07

标签: postgresql triggers plpgsql

我有一个触发器来更新每个表的时间戳。我使用以下函数:

CREATE OR REPLACE FUNCTION update_timstamp_table0() RETURNS TRIGGER AS
$$
BEGIN
IF NEW IS DISTINCT FROM OLD THEN
  NEW.table0_timestamp_column = extract( 'epoch' from NOW() )
  RETURN NEW;
ELSE
  RETURN NULL;
END IF;
END;
$$ LANGUAGE 'plpgsql';

由于所有时间戳列都有不同的名称,我必须为每个表编写一个函数。

我想做这样的事情:

CREATE OR REPLACE FUNCTION update_timstamp(timestamp_col_name varchar) RETURNS TRIGGER AS
$$
BEGIN
IF NEW IS DISTINCT FROM OLD THEN
  NEW.(timestamp_col_name) = extract( 'epoch' from NOW() )
  RETURN NEW;
ELSE
  RETURN NULL;
END IF;
END;
$$ LANGUAGE 'plpgsql';

所以我可以为每个触发器使用相同的功能。但我不知道通过变量NEW.(timestamp_col_name)访问列的正确语法。

这可能吗?以及它是如何完成的?

1 个答案:

答案 0 :(得分:1)