mall数据库文件
This commit is contained in:
89
pages/user/test/USER_AUTH_TRIGGER.sql
Normal file
89
pages/user/test/USER_AUTH_TRIGGER.sql
Normal file
@@ -0,0 +1,89 @@
|
||||
-- ============================================
|
||||
-- 自动创建 ak_users 记录的触发器
|
||||
-- ============================================
|
||||
-- 位置:pages/user/test/USER_AUTH_TRIGGER.sql
|
||||
-- 用途:当 auth.users 表中创建新用户时,自动在 ak_users 表中创建对应的业务资料记录
|
||||
--
|
||||
-- 执行方式:
|
||||
-- 在 Supabase Dashboard 的 SQL Editor 中执行此文件
|
||||
-- 需要 superuser 权限(Dashboard 默认有)
|
||||
-- ============================================
|
||||
|
||||
-- 触发器函数 `public.handle_new_user()` 的定义在 `USER_AUTH_SCHEMA.sql` 中完成。
|
||||
-- 这里仅负责在 auth.users 上创建触发器(避免重复定义函数导致版本不一致)。
|
||||
|
||||
-- 兼容处理:如果 `public.handle_new_user()` 尚未创建(例如先执行了本文件),则在此处补齐创建。
|
||||
-- 说明:这里采用“存在则跳过”的创建方式,不会覆盖已有实现。
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_proc p
|
||||
JOIN pg_namespace n ON n.oid = p.pronamespace
|
||||
WHERE n.nspname = 'public'
|
||||
AND p.proname = 'handle_new_user'
|
||||
) THEN
|
||||
EXECUTE $fn$
|
||||
CREATE FUNCTION public.handle_new_user()
|
||||
RETURNS TRIGGER
|
||||
LANGUAGE plpgsql
|
||||
SECURITY DEFINER
|
||||
SET search_path = public
|
||||
AS $body$
|
||||
BEGIN
|
||||
BEGIN
|
||||
INSERT INTO public.ak_users (id, email, username)
|
||||
VALUES (
|
||||
NEW.id,
|
||||
NEW.email,
|
||||
COALESCE(SPLIT_PART(NEW.email, '@', 1), 'user')
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
EXCEPTION WHEN OTHERS THEN
|
||||
RAISE WARNING 'handle_new_user failed: %', SQLERRM;
|
||||
END;
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$body$;
|
||||
$fn$;
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- 在 auth.users 表上创建触发器
|
||||
-- 注意:这个触发器会在每次 auth.users 插入新记录时自动执行
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'on_auth_user_created') THEN
|
||||
EXECUTE 'CREATE TRIGGER on_auth_user_created AFTER INSERT ON auth.users FOR EACH ROW EXECUTE FUNCTION public.handle_new_user()';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- ============================================
|
||||
-- 验证触发器
|
||||
-- ============================================
|
||||
-- 执行以下查询验证触发器是否创建成功:
|
||||
-- SELECT * FROM pg_trigger WHERE tgname = 'on_auth_user_created';
|
||||
-- SELECT * FROM pg_proc WHERE proname = 'handle_new_user';
|
||||
|
||||
-- ============================================
|
||||
-- 测试触发器(可选)
|
||||
-- ============================================
|
||||
-- 注意:以下测试代码会创建一个测试用户,执行前请确认
|
||||
--
|
||||
-- 1. 通过 Supabase Auth API 注册一个新用户
|
||||
-- 2. 检查 ak_users 表中是否自动创建了对应的记录
|
||||
--
|
||||
-- 或者手动测试(需要 admin 权限):
|
||||
-- INSERT INTO auth.users (id, email, encrypted_password, email_confirmed_at, created_at, updated_at)
|
||||
-- VALUES (
|
||||
-- gen_random_uuid(),
|
||||
-- 'test@example.com',
|
||||
-- crypt('password', gen_salt('bf')),
|
||||
-- NOW(),
|
||||
-- NOW(),
|
||||
-- NOW()
|
||||
-- );
|
||||
--
|
||||
-- 然后检查 ak_users 表:
|
||||
-- SELECT * FROM ak_users WHERE email = 'test@example.com';
|
||||
Reference in New Issue
Block a user