关于 postgresql
这是面向 PostgreSQL 开发与运维工作的参考指南,重点涵盖多租户行级安全、迁移、版本变化和安全操作。适合负责数据库模式、租户隔离及升级验证的团队。
主要功能
- 01设置事务级 RLS 租户上下文
- 02规划多租户表与索引
- 03检查 Alembic 迁移步骤
- 04测试租户数据隔离
- 05参考 PostgreSQL 版本与升级信息
- 06执行破坏性操作前核验目标
适用场景
- 01为租户查询配置 RLS
- 02验证不同租户的数据可见性
- 03规划数据库模式变更与回滚
- 04安全执行删除或表结构操作
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ itechmeat/ llm-code --skill postgresql安装后在 Claude Code 中输入/postgresql确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/authentication-oauth.mdauthentication.mdcharset-encoding.mdconnection-settings.mderror-handling.mdinternals.mdpostgresql-19.mdprotocol.mdquery-tuning.mdreplication.mdtable-design.mduser-management.mdvacuum.md详细介绍
PostgreSQL
RLS 多租户模式
不可妥协的要求
- 任何针对租户范围的查询都必须设置 RLS 上下文
- 必须在与查询相同的事务中设置上下文
- 不提供租户 ID 的回退方案(缺失时立即失败)
- 使用异步框架时,数据库访问必须仅采用异步方式
设置 RLS 上下文
只有在当前事务中设置了上下文,RLS 才会生效:
SET LOCAL app.current_tenant_id = '<tenant_uuid>';
必须在该事务中执行第一个针对租户范围的查询之前运行。
常见故障模式
- 在第一个
select()之后才设置SET LOCAL ... - 在一个会话中设置上下文,然后在另一个会话中查询
- 在预期的事务范围之外运行查询
典型 RLS 策略
ALTER TABLE some_table ENABLE ROW LEVEL SECURITY;
CREATE POLICY some_table_tenant_isolation
ON some_table
USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid);
多租户表检查清单
- 租户 ID 列为 UUID
- 通过
ON DELETE CASCADE外键关联到租户表 - 索引应与访问模式相匹配(通常将 tenant_id 放在首位)
- PostgreSQL 不会自动为外键列创建索引——请显式添加索引
- 除非使用
NULLS NOT DISTINCT(PG15+),否则 UNIQUE 允许多个 NULL
- 已启用 RLS 并创建策略
- 应用代码在事务开始时设置 RLS 上下文
Alembic 迁移检查清单
- 添加/修改架构(列、约束、外键)
- 创建/更新索引
- 启用 RLS 并创建/调整策略
- 添加隔离验证(测试)
- 提供真正的降级迁移(不得使用空实现)
版本说明
PostgreSQL 19(测试版)
- 19 目前处于 Beta 3(2026-08-13);预计于 2026 年 9 月/10 月正式发布,具体信息仍可能变化。最新稳定版本系列为
18.6。 - 主要变化:新增
REPACK/REPACK CONCURRENTLY,取代VACUUM FULL和CLUSTER;通过评分系统实现并行 autovacuum;支持序列的逻辑复制、SQL/PGQ 属性图、GROUP BY ALL、FOR PORTION OF,以及在线启用/禁用校验和。 - 需规划应对的 18 项不兼容变更,包括强制使用
standard_conforming_strings、移除 RADIUS、默认关闭jit、将default_toast_compression切换为lz4,以及将max_locks_per_transaction默认值设为 128 并更改其大小计算方式。 - 完整详情和升级检查清单:postgresql-19.md
PostgreSQL 18.4
18.4是安全性/稳健性补丁版本;现有18.x集群无需转储/恢复。- 此补丁系列强化了启动数据包解析、备份工具(
pg_basebackup、pg_rewind、pg_verifybackup)以及多个逻辑复制代码路径。 - 此外,还修复了
MERGE、非确定性排序规则、生成列以及各类聚合/窗口边缘情况相关的规划器/执行器问题。
RLS 隔离测试步骤
目标:
- 租户 A 的数据对租户 A 可见
- 租户 A 的数据对租户 B 不可见
标准流程:
- 通过管理员会话(绕过 RLS)为租户 A 和 B 设置数据
- 通过 RLS 会话断言:
- 将上下文设为租户 A → 只能看到租户 A 的数据
- 将上下文设为租户 B → 看不到租户 A 的数据
破坏性操作安全规范
硬性规则:
- 绝不运行没有使用精确
WHERE条件指定目标数据的DELETE - 未经明确确认,绝不运行
TRUNCATE/DROP
破坏性操作前的检查:
- 确认确切目标(表 / ID / 日期范围)
- 先运行
SELECT/行数统计并展示结果 - 请求最终确认,然后执行
参考资料
版本
- postgresql-19.md — PostgreSQL 19(测试版):按领域整理的新功能、完整的不兼容变更列表、升级检查清单
架构与设计
- table-design.md — 数据类型、约束、索引、分区、JSONB、安全的架构演进
- charset-encoding.md — 字符集、编码、排序规则、ICU、区域设置
身份验证
- authentication.md — pg_hba.conf、SCRAM-SHA-256、md5、peer、cert、LDAP、GSSAPI
- authentication-oauth.md — OAuth 2.0(PostgreSQL 18+)、SASL OAUTHBEARER、验证器
- user-management.md — CREATE/ALTER/DROP ROLE、成员关系、GRANT/REVOKE、预定义角色
运行时配置
- connection-settings.md — listen_addresses、max_connections、SSL、TCP 保活
- query-tuning.md — 规划器设置、work_mem、并行查询、成本常量
- replication.md — 流复制、WAL、同步提交、逻辑复制
- vacuum.md — 自动清理、清理成本模型、冻结年龄、单表调优
- error-handling.md — exit_on_error、restart_after_crash、data_sync_retry
内部机制
- internals.md — 查询处理流水线、解析器/重写器/规划器/执行器、系统目录、线协议、访问方法
- protocol.md — 线协议 v3.2:消息格式、启动、身份验证、查询、COPY、复制
链接
另请参阅
- sql-expert — 查询模式、EXPLAIN 工作流、优化
评论
支持 Markdown