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

如何在Supabase数据库迁移中使用变量管理敏感配置?

Supabase迁移文件中动态注入环境变量的最佳实践

方法一:利用psql环境变量注入(推荐)

Supabase CLI底层依赖psql,而psql支持直接引用系统环境变量,结合.env文件就能实现本地/线上环境的自动切换:

  1. 本地创建.env文件(务必加入.gitignore),写入:
SUPABASE_PROJECT_URL="http://localhost:54321"
SUPABASE_SERVICE_ROLE_KEY="你的本地服务角色密钥"

线上部署时,直接在Supabase控制台的「设置→环境变量」中配置这两个值即可。

  1. 修改SQL函数,用psql的环境变量语法引用:
declare
  project_url text := :'SUPABASE_PROJECT_URL';
  service_role_key text := :'SUPABASE_SERVICE_ROLE_KEY'; -- 需要全权限
  1. 执行迁移时,本地环境下Supabase CLI会自动加载.env里的变量;线上部署时则直接读取项目配置的环境变量,完全不用手动修改迁移文件。

方法二:将敏感信息存储为数据库自定义参数

把项目URL和密钥存在数据库的自定义配置参数中,函数运行时动态读取,彻底避免敏感值出现在迁移文件里:

  1. 新建迁移文件(或直接在本地/线上的SQL编辑器中执行),设置数据库参数:
-- 本地环境执行
ALTER SYSTEM SET custom.supabase_project_url = 'http://localhost:54321';
ALTER SYSTEM SET custom.supabase_service_role_key = '你的本地密钥';

-- 线上环境执行
ALTER SYSTEM SET custom.supabase_project_url = '你的线上项目URL';
ALTER SYSTEM SET custom.supabase_service_role_key = '你的线上服务角色密钥';

-- 重载配置使生效
SELECT pg_reload_conf();
  1. 修改函数,动态读取这些参数:
declare
  project_url text := current_setting('custom.supabase_project_url');
  service_role_key text := current_setting('custom.supabase_service_role_key');

这种方式的核心是敏感信息仅存储在数据库配置中,本地和线上各自维护自己的参数即可,迁移文件里完全不会出现敏感内容。

方法三:使用迁移预处理脚本

如果前两种方法不适用,可写个简单的shell脚本,在执行迁移前替换模板文件中的变量:

  1. 创建迁移模板文件(比如template_function.sql),用占位符标记变量:
declare
  project_url text := '{{PROJECT_URL}}';
  service_role_key text := '{{SERVICE_ROLE_KEY}}';
  1. 编写shell脚本(比如run_migration.sh),读取.env变量并生成实际迁移文件:
#!/bin/bash
source .env
sed "s/{{PROJECT_URL}}/$SUPABASE_PROJECT_URL/g; s/{{SERVICE_ROLE_KEY}}/$SUPABASE_SERVICE_ROLE_KEY/g" template_function.sql > migrations/$(date +%Y%m%d%H%M%S)_add_function.sql

# 执行迁移
supabase db push
  1. 将模板文件和脚本加入版本控制,但生成的迁移文件要加入.gitignore,仅在本地执行生成,不提交到GitHub。

关键注意事项

  • 服务角色密钥绝对不能提交到代码仓库,务必确保.env文件或数据库参数仅在本地和线上环境配置,不进入版本控制。
  • 线上环境配置的环境变量,Supabase会自动在数据库会话中加载,无需额外操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:25:25