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

创建Supabase触发器函数遇语法错误求助(PL/pgSQL)

问题诊断与修复

你的代码出现语法错误的核心原因是PL/pgSQL的IF分支结构不匹配:

你使用了else if来实现多分支,但这种写法在PL/pgSQL中会开启一个新的嵌套IF块,需要额外的END IF来闭合。而你的代码里只写了一个END IF,导致语法解析失败。

修正后的代码

drop function if exists handle_new_user();
create function handle_new_user()
returns trigger
language plpgsql
security definer set search_path = public
as $$
begin
  if new.raw_user_meta_data::json->>'type' = 'practice' then
    insert into profiles (user_id, email, username, type, practice_id)
    values (
      new.id,
      new.email,
      new.raw_user_meta_data::json->>'username',
      new.raw_user_meta_data::json->>'type',
      new.id
    );
  ELSIF new.raw_user_meta_data::json->>'type' = 'salesRep' then
    insert into profiles (user_id, email, username, type, rep_id)
    values (
      new.id,
      new.email,
      new.raw_user_meta_data::json->>'username',
      new.raw_user_meta_data::json->>'type',
      new.id
    );
  end if;
  return new;
end;
$$;

create trigger on_auth_user_created
  after insert on auth.users
  for each row execute procedure handle_new_user();

关键修改点

  • 将else if替换为PL/pgSQL标准的多分支关键字ELSIF(单关键字写法),这样整个IF结构只需要一个END IF即可正确闭合,解决语法错误。
  • 其余业务逻辑和触发器定义无需修改。

内容的提问来源于stack exchange,提问作者Luke Longo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:57:23