在触发器函数中能否使用变量字段名读取NEW记录?
在PostgreSQL触发器函数中动态读取NEW记录的字段值
当需要在触发器函数里通过变量动态读取NEW记录的字段值时,以下两种尝试写法无法生效:
错误写法1
DECLARE _fieldName VARCHAR:=''; _fieldValue VARCHAR; BEGIN _fieldName = 'field1'; _fieldValue = new[_fieldName];
PostgreSQL不支持通过数组下标语法new[_fieldName]动态引用记录字段。
错误写法2
execute 'select NEW.$1', into _fieldValue using _fieldName;
该写法中$1会被当作参数传入字段名,但无法直接替换NEW的字段名,导致语法逻辑错误。
正确解决方案
execute 'select $1.' || _fieldName using NEW into _fieldValue;
通过EXECUTE动态拼接SQL语句:将NEW记录作为参数$1传入,再拼接变量_fieldName指定的字段名,以此实现动态读取对应字段的值。
内容的提问来源于stack exchange,提问作者MMAARR
相关产品推荐
相关产品推荐

