# 商城数据库语法修正报告 ## 修正概述 本次修正主要解决了 PostgreSQL RLS (Row Level Security) 策略语法错误,确保数据库脚本可以正常执行。 ## 主要修正内容 ### 1. RLS 策略语法修正 **问题描述:** 原始 RLS 策略使用了错误的语法: ```sql -- 错误语法 CREATE POLICY ml_products_modify_policy ON public.ml_products FOR INSERT, UPDATE, DELETE USING (...); ``` **修正方案:** PostgreSQL 不支持在单个策略中同时定义多个操作类型,需要分别创建: - SELECT 操作使用 `USING` 子句 - INSERT 操作使用 `WITH CHECK` 子句 - UPDATE 操作使用 `USING` 子句 - DELETE 操作使用 `USING` 子句 **修正后语法:** ```sql -- 正确语法 CREATE POLICY ml_products_select_policy ON public.ml_products FOR SELECT USING (status = 1); CREATE POLICY ml_products_insert_policy ON public.ml_products FOR INSERT WITH CHECK ( auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id) ); CREATE POLICY ml_products_update_policy ON public.ml_products FOR UPDATE USING ( auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id) ); CREATE POLICY ml_products_delete_policy ON public.ml_products FOR DELETE USING ( auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id) ); ``` ### 2. 修正的数据表 以下数据表的 RLS 策略已全部修正: 1. **ml_user_profiles** - 用户档案表 2. **ml_user_addresses** - 用户地址表 3. **ml_shopping_cart** - 购物车表 4. **ml_user_favorites** - 用户收藏表 5. **ml_browse_history** - 浏览历史表 6. **ml_user_coupons** - 用户优惠券表 7. **ml_orders** - 订单表 8. **ml_products** - 商品表 ### 3. 验证的语法正确性 以下语法已验证无误: ✅ **扩展启用语法** ```sql CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE EXTENSION IF NOT EXISTS "pg_stat_statements"; CREATE EXTENSION IF NOT EXISTS "btree_gin"; ``` ✅ **UUID 生成语法** ```sql id UUID PRIMARY KEY DEFAULT uuid_generate_v4() ``` ✅ **JSONB 数据类型** ```sql preferences JSONB DEFAULT '{}' image_urls JSONB DEFAULT '[]' ``` ✅ **函数定义语法** ```sql CREATE OR REPLACE FUNCTION public.update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; ``` ✅ **触发器语法** ```sql CREATE TRIGGER trigger_ml_user_profiles_updated_at BEFORE UPDATE ON public.ml_user_profiles FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column(); ``` ## 修正后的文件状态 **文件路径:** `h:\blews\akmon\doc_mall\database\complete_mall_database.sql` **修正前行数:** 1056 行 **修正后行数:** 1177 行(增加了分离的 RLS 策略定义) ## RLS 策略权限设计 ### 用户数据权限 - **原则:** 用户只能访问自己的数据 - **实现:** 通过 `auth.uid()` 与 `ak_users.auth_id` 关联验证 ### 商品权限 - **查看权限:** 所有人可查看已上架商品(status = 1) - **管理权限:** 商家只能管理自己的商品 ### 订单权限 - **查看权限:** 用户可查看自己的订单,商家可查看自己店铺的订单 - **实现:** 同时检查 `user_id` 和 `merchant_id` ## 数据库兼容性 ✅ **PostgreSQL 兼容** - 使用标准 PostgreSQL 语法 - 支持 JSONB 数据类型 - 使用 uuid-ossp 扩展 ✅ **Supabase 兼容** - 支持 Row Level Security - 使用 `auth.uid()` 进行身份验证 - 遵循 Supabase 权限模型 ## 部署建议 1. **执行顺序:** 按脚本中的顺序依次执行 2. **权限检查:** 确保数据库用户有创建扩展的权限 3. **数据验证:** 执行后验证 RLS 策略是否正确生效 4. **测试建议:** 在测试环境先执行完整脚本验证 ## 修正完成状态 ✅ **语法错误已修正** ✅ **RLS 策略已优化** ✅ **PostgreSQL 兼容性已确认** ✅ **Supabase 兼容性已确认** ✅ **可安全部署** --- **修正时间:** 2024年12月19日 **修正文件:** complete_mall_database.sql **验证状态:** 语法验证通过,可进行部署测试