这是我的情况:我有一个PostgreSQL表用于存储电子邮件地址,有时电子邮件地址包含地址扩展名,如[email protected] ,我想创build一个触发器来存储地址没有扩展到另一列。
创build或replacefunctionstrip_addr_extension()RETURNS TRIGGER AS $$
开始
IF(NEW.email LIKE'%+%')THEN
NEW.email_raw:= split_part(NEW.email,'+',1)|| '@'|| split_part(NEW.email,'@',-1);
其他
NEW.email_raw:= NEW.email;
万一;
返回新;
结束;
$$ LANGUAGE plpgsql;
CREATE TRIGGER maddr_email_raw
之前插入maddr
为每一行
执行过程strip_addr_extension();
当我插入一个新的logging,它会引发错误:
SQL> insert into maddr(email)values('[email protected]'); 错误:函数split_part(bytea,unknown,integer)不存在 LINE 1:SELECT split_part(NEW.email,'+',1)|| '@'|| split_part(NE ... ^ 提示:没有函数匹配给定的名称和参数types。 您可能需要添加明确的types转换。 QUERY:SELECT split_part(NEW.email,'+',1)|| '@'|| split_part(NEW.email,'@',-1) CONTEXT:PL / pgSQL函数strip_addr_extension()第4行赋值
有什么问题,我该如何解决? 谢谢。 🙂
错误:函数split_part(bytea,unknown,integer)不存在
此错误消息显示email列的types为bytea ,通常用于二进制数据。
文本函数不能使用二进制参数,因为它们不能假定在一系列字节后面有一个有效的编码(和哪一个)的文本。
考虑将数据types更改为text或使用convert_from(string bytea, src_encoding name)函数将bytea数据dynamic转换为text数据。