Postgresql:如何从函数触发器中结构化的记录访问驼峰键
Postgresql: How to access camelcased keys from Record structured in function triggers
我正在使用 postgres 9.5,并在将行添加到 table 时将触发器定义为 运行,如:
CREATE TRIGGER addedTrigger AFTER INSERT ON ships
FOR EACH ROW EXECUTE PROCEDURE added();
我的 added
函数是用 plpgsql 编写的,其目的是获取一些数据,assemble 将其转换为特定格式,然后 pg_notify 发送到频道。这类似于 body:
$$
BEGIN
PERFORM pg_notify('events', json_build_object('type', 'ADDED', 'userId', NEW.userId)::text);
RETURN NULL;
END;
$$
然而,当触发器 运行s 时,我得到以下错误信息:
ERROR: record "new" has no field "userid"
CONTEXT: SQL statement "SELECT NEW.userId"
PL/pgSQL function added() line 5 at RAISE
plpgsql 函数以某种方式在内部缩小了我的键注释,我不确定如何正确使用它,因为我在野外看到的所有示例都带有 non-primary-or-foreign-key 属性,并且所有它们是小写的。
ERROR: record "new" has no field "userid"
确实是一个正确的错误 - 没有列 "userid"(请参阅错误中的名称与您的代码中的名称不同)。如果您使用混合大小写(或以数字或特殊字符开头的标识符或使用任何其他不常见的名称),则必须将标识符用双引号引起来,因此 NEW."userId"
应该适合您。
https://www.postgresql.org/docs/current/static/tutorial-table.html
SQL is case insensitive about key words and identifiers, except when
identifiers are double-quoted to preserve the case
我正在使用 postgres 9.5,并在将行添加到 table 时将触发器定义为 运行,如:
CREATE TRIGGER addedTrigger AFTER INSERT ON ships
FOR EACH ROW EXECUTE PROCEDURE added();
我的 added
函数是用 plpgsql 编写的,其目的是获取一些数据,assemble 将其转换为特定格式,然后 pg_notify 发送到频道。这类似于 body:
$$
BEGIN
PERFORM pg_notify('events', json_build_object('type', 'ADDED', 'userId', NEW.userId)::text);
RETURN NULL;
END;
$$
然而,当触发器 运行s 时,我得到以下错误信息:
ERROR: record "new" has no field "userid"
CONTEXT: SQL statement "SELECT NEW.userId"
PL/pgSQL function added() line 5 at RAISE
plpgsql 函数以某种方式在内部缩小了我的键注释,我不确定如何正确使用它,因为我在野外看到的所有示例都带有 non-primary-or-foreign-key 属性,并且所有它们是小写的。
ERROR: record "new" has no field "userid"
确实是一个正确的错误 - 没有列 "userid"(请参阅错误中的名称与您的代码中的名称不同)。如果您使用混合大小写(或以数字或特殊字符开头的标识符或使用任何其他不常见的名称),则必须将标识符用双引号引起来,因此 NEW."userId"
应该适合您。
https://www.postgresql.org/docs/current/static/tutorial-table.html
SQL is case insensitive about key words and identifiers, except when identifiers are double-quoted to preserve the case