PostgreSQL中INSERT前用initcap处理字段的触发器函数实现方法
实现PostgreSQL的name字段自动initcap格式化触发器
嘿,这事儿很简单!你只需要在触发器函数里修改NEW对象的name字段就行——因为BEFORE类型的触发器允许我们调整即将插入的行数据。
完整的代码应该是这样的:
-- 先创建触发器函数 CREATE FUNCTION format_client_name() returns trigger as $BODY$ begin -- 对即将插入的name字段调用initcap()函数做格式化 NEW.name = initcap(NEW.name); -- 返回修改后的新行,PostgreSQL会用这个值执行最终插入 return NEW; end; $BODY$ language plpgsql; -- 然后创建触发器,绑定到client表的BEFORE INSERT事件 CREATE TRIGGER trigg_client_name_initcap BEFORE INSERT ON client FOR EACH ROW EXECUTE PROCEDURE format_client_name();
关键点解释:
NEW是PostgreSQL触发器里的特殊变量,代表即将被插入的新行,我们可以直接修改它的字段值- 因为是
BEFORE INSERT触发器,修改后的NEW会被PostgreSQL用作最终插入的数据 - 触发器函数必须返回
NEW(针对BEFORE INSERT/UPDATE场景),否则插入操作会被终止
这样设置之后,不管你插入的name是全大写、全小写还是混合格式,都会自动被转换成首字母大写、其余小写的标准格式啦!
内容的提问来源于stack exchange,提问作者Jose Ramirez
相关产品推荐
相关产品推荐

