在PostgreSQL触发器中访问动态列值

时间:2013-12-23 08:27:30

标签: postgresql triggers

我正在使用plpgsql在Postgresql中编写记录更新的触发器。在触发器中,我正在访问一个值列值,如下所示

    NEW.mobileno   -- This is usual way.

现在我的要求是,我将在一个名为dyn_columnname的变量中使用'mobileno'文本

使用这个NEW和dyn_columnname,我应该像NEW.mobileno值一样访问。

我怎样才能做到这一点..?

1 个答案:

答案 0 :(得分:0)

您需要使用动态sql:

execute _dyn_sql_string into _dyn_col_value using _dyn_col_name;

http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

通常最好避免以这种情况开始,这就是说,因为生成的查询计划无法像非动态触发器中的计划一样高效缓存。

如果您只是遍历列,请考虑使用动态sql来处理此问题,而不是编写动态触发器函数,而是编写创建或替换非动态触发器函数的动态函数。

如果您因某种业务逻辑而使用此功能,请考虑重新访问您的架构以完全避免这种情况。