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

Supabase用户元数据存储带引号问题及修复方案问询

问题

我在Supabase中编写了一个触发器函数,用于用户注册完成后将额外数据插入public.users表:

declare
  username text;
  name text;
begin

  insert into public.users (id, email, username, name, role)
values (new.id, new.email, new.raw_user_meta_data -> 'username', name = new.raw_user_meta_data -> 'name', 'student');

  return new;
end;

通过Postman发起认证请求测试,请求体如下:

{
  "email": "tst@gmail.com",
  "password": "asdflk;jsadfkl;j",
  "data": {
    "username":"Tester",
    "name":"Tester number one"
  }
}

预期public.users表中存储的username和name值为Tester和Tester number one,但实际存储的是带双引号的"Tester"和"Tester number one",请问该如何修复?

解决方案

问题出在两个核心点:

  • 使用->JSON操作符:这个操作符返回的是JSON类型值,会保留原始JSON的字符串格式(包括双引号),而我们需要的是纯文本类型。
  • name字段写法错误:原代码里的name = new.raw_user_meta_data -> 'name'是赋值语句,不是正确的字段值表达式。

修改后的函数代码如下:

declare
  username text;
  name text;
begin

  insert into public.users (id, email, username, name, role)
values (new.id, new.email, new.raw_user_meta_data ->> 'username', new.raw_user_meta_data ->> 'name', 'student');

  return new;
end;

关键修正说明:

  1. 替换操作符:把->换成->>,这个操作符会直接提取JSON字段的纯文本值,自动去除双引号,返回字符串类型,完全符合预期需求。
  2. 修正字段表达式:移除name =的错误写法,直接用new.raw_user_meta_data ->> 'name'作为name字段的插入值即可。

修改后,public.users表中存储的username和name就会是不带双引号的纯文本内容,与预期一致。

内容的提问来源于stack exchange,提问作者Raka M.A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:33:11