database – 使用`BEFORE INSERT`触发器更改传入数据的数据类型以匹配PostgreSQL中的列数据类型

前端之家收集整理的这篇文章主要介绍了database – 使用`BEFORE INSERT`触发器更改传入数据的数据类型以匹配PostgreSQL中的列数据类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个postgres表,列C的类型为T.人们将使用COPY将数据插入此表.但是有时它们会尝试为不属于T类型的C插入一个值,但是我有一个postgres函数可以将值转换为T.

我正在尝试在表上写一个BEFORE INSERT触发器,它将在数据上调用函数,以便我可以确保没有插入类型错误.但是它似乎不起作用,我在尝试插入数据时遇到错误,即使触发器在那里也是如此.

在我花太多时间调查之前,我想知道这是否可行.我可以用这种方式使用触发器来更改传入数据的类型吗?

我希望这个在postgresql 9.3上运行,但我注意到postgres 9.5上的错误和无效触发器.

解决方法

不,你不能使用这种方法.原因是后端已经使用要插入表中的值填充记录.这是触发器中可用的NEW参数的形式.因此,即使在触发器触发之前,也会抛出错误.

顺便说一句,这同样适用于规则,因此凯文在他的评论中提出的建议是行不通的.

可能最好的解决方案是创建一个具有“许可”列数据类型(如文本)的登台表,然后在该表上放置一个BEFORE INSERT触发器,在将所有列值插入最终表之前将其转换为正确的类型.如果第二次插入成功,你甚至可以从插入中返回NULL,这样行就不会进入表格(不过,不确定,COPY会怎么想……).最终在表中的那些记录中包含一些奇怪的数据,然后您可以手动处理这些行.

原文链接:https://www.f2er.com/mssql/77650.html

猜你在找的MsSQL相关文章