2017-06-01 89 views
1

我使用的Postgres 9.5,定义触发到线时行添加到一个表中运行,东西:PostgreSQL的:如何从记录在功能结构驼峰访问键触发

CREATE TRIGGER addedTrigger AFTER INSERT ON ships 
     FOR EACH ROW EXECUTE PROCEDURE added(); 

我的added函数是用plpgsql编写的,其目的是获取一些数据,将其组装成一定的格式,并通过pg_notify发送到一个通道。这是类似的东西身体:

$$ 
BEGIN 
PERFORM pg_notify('events', json_build_object('type', 'ADDED', 'userId', NEW.userId)::text); 
RETURN NULL; 
END; 
$$ 

然而,触发运行时,我收到以下错误消息:

ERROR: record "new" has no field "userid" 
CONTEXT: SQL statement "SELECT NEW.userId" 
PL/pgSQL function added() line 5 at RAISE 

不知何故,PLPGSQL函数内部downcasing我的钥匙注释,我不确定如何恰当地使用它,因为我在野外看到的所有示例都使用非主键或外键属性,并且所有这些属性都是downcased。

+0

从'错误friendregistered()',但你'加()'扳机 - 水木清华你不告诉我们。 –

+0

道歉,迷路了,在整个重命名我的功能? ) – ChuckE

+0

'NEW.userId'中有混合的情况 - 如果确实有这种情况,那么更改为'NEW。“userId”' –

回答

1

ERROR: record "new" has no field "userid"

确实是一个正确的错误 - 没有列“用户ID”(看名字错误是不同的,那么在你的代码)。如果您使用混合大小写(或带有数字或特殊字符的开始标识符或使用任何其他不常用的名称),则必须双引号标识符,因此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