You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL插入数据后,如何创建触发器用列值更新指定列?

解决PostgreSQL触发器自动处理stripped字段的问题

原代码的问题点:

  • 函数返回类型拼写错误:把trigger写成了tigger,会导致函数创建失败
  • 触发器时机错误:after insert是在数据插入后触发,此时修改NEW变量无法影响已插入的行,必须用before insert在插入前修改行数据
  • 触发器级别错误:for each statement级别的触发器无法访问单条行的NEW数据,必须用for each row做逐行处理
  • 正则表达式冗余:字符类中的|是多余的(字符类里的|就是普通字符,不是逻辑或),可简化为[- .\/]

修正后的完整代码:

-- 创建处理函数,修正拼写错误
create or replace function strip_vol()
returns trigger as $$
begin
  -- 去除指定符号并转小写,优化正则表达式
  new.stripped_columnA := lower(REGEX_REPLACE(new.columnA, '[- .\/]', '', 'g'));
  new.stripped_columnB := lower(REGEX_REPLACE(new.columnB, '[- .\/]', '', 'g'));
  return new;
end $$ language plpgsql;

-- 创建BEFORE级别的行触发器
create trigger abc_trigger
before insert on tableA
for each row
execute procedure strip_vol();

导入CSV的注意事项:

用psql的COPY命令导入时,触发器会自动触发处理stripped_columnA和stripped_columnB,无需额外操作。示例COPY命令:

psql -d your_database -c "COPY tableA (columnA, columnB) FROM '/path/to/your/file.csv' DELIMITER ',' CSV HEADER;"

内容的提问来源于stack exchange,提问作者Franklin Raja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:52:06