database – 使用`BEFORE INSERT`触发器更改传入数据的数据类型
发布时间:2020-12-12 06:50:12 所属栏目:MsSql教程 来源:网络整理
导读:我有一个postgres表,列C的类型为T.人们将使用COPY将数据插入此表.但是有时它们会尝试为不属于T类型的C插入一个值,但是我有一个postgres函数可以将值转换为T. 我正在尝试在表上写一个BEFORE INSERT触发器,它将在数据上调用此函数,以便我可以确保没有插入类型错
我有一个postgres表,列C的类型为T.人们将使用COPY将数据插入此表.但是有时它们会尝试为不属于T类型的C插入一个值,但是我有一个postgres函数可以将值转换为T.
我正在尝试在表上写一个BEFORE INSERT触发器,它将在数据上调用此函数,以便我可以确保没有插入类型错误.但是它似乎不起作用,我在尝试插入数据时遇到错误,即使触发器在那里也是如此. 在我花太多时间调查之前,我想知道这是否可行.我可以用这种方式使用触发器来更改传入数据的类型吗? 我希望这个在postgresql 9.3上运行,但我注意到postgres 9.5上的错误和无效触发器. 解决方法不,你不能使用这种方法.原因是后端已经使用要插入表中的值填充记录.这是触发器中可用的NEW参数的形式.因此,即使在触发器触发之前,也会抛出错误.顺便说一句,这同样适用于规则,因此凯文在他的评论中提出的建议是行不通的. 可能最好的解决方案是创建一个具有“许可”列数据类型(如文本)的登台表,然后在该表上放置一个BEFORE INSERT触发器,在将所有列值插入最终表之前将其转换为正确的类型.如果第二次插入成功,你甚至可以从插入中返回NULL,这样行就不会进入表格(不过,不确定,COPY会怎么想……).最终在表中的那些记录中包含一些奇怪的数据,然后您可以手动处理这些行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |