PostgreSQL 17/18 不支持 CREATE POLICY IF NOT EXISTS 或 CREATE OR REPLACE POLICY,可重复迁移策略有三种:一是在同一事务中先 DROP POLICY IF EXISTS 再 CREATE POLICY,能确保定义正确,但 DROP 会取 ACCESS EXCLUSIVE 锁,事务外执行会出现无策略空窗,FORCE 下所有租户查不到数据;二是用 DO 块查 pg_policies 再创建,适合只建不改的策略,并发部署需加 advisory 锁;三是仅改表达式或角色时用 ALTER POLICY,但同样取 ACCESS EXCLUSIVE 锁且策略不存在时会失败。建议配合 lock_timeout。
完成下面两步后,将自动完成登录并继续当前操作。