加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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会怎么想……).最终在表中的那些记录中包含一些奇怪的数据,然后您可以手动处理这些行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读