mcpField
P
postgresql

postgresql

github.com/itechmeat数据与数据库2496 次安装6 天前更新
代码仓库

关于 postgresql

这是面向 PostgreSQL 开发与运维工作的参考指南,重点涵盖多租户行级安全、迁移、版本变化和安全操作。适合负责数据库模式、租户隔离及升级验证的团队。

主要功能

  1. 01设置事务级 RLS 租户上下文
  2. 02规划多租户表与索引
  3. 03检查 Alembic 迁移步骤
  4. 04测试租户数据隔离
  5. 05参考 PostgreSQL 版本与升级信息
  6. 06执行破坏性操作前核验目标

适用场景

  1. 01为租户查询配置 RLS
  2. 02验证不同租户的数据可见性
  3. 03规划数据库模式变更与回滚
  4. 04安全执行删除或表结构操作

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/itechmeat/llm-code --skill postgresql

安装后在 Claude Code 中输入/postgresql确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
authentication-oauth.md
authentication.md
charset-encoding.md
connection-settings.md
error-handling.md
internals.md
postgresql-19.md
protocol.md
query-tuning.md
replication.md
table-design.md
user-management.md
vacuum.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 迁移检查清单

  1. 添加/修改架构(列、约束、外键)
  2. 创建/更新索引
  3. 启用 RLS 并创建/调整策略
  4. 添加隔离验证(测试)
  5. 提供真正的降级迁移(不得使用空实现)

版本说明

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 不可见

标准流程:

  1. 通过管理员会话(绕过 RLS)为租户 A 和 B 设置数据
  2. 通过 RLS 会话断言:
    • 将上下文设为租户 A → 只能看到租户 A 的数据
    • 将上下文设为租户 B → 看不到租户 A 的数据

破坏性操作安全规范

硬性规则:

  • 绝不运行没有使用精确 WHERE 条件指定目标数据的 DELETE
  • 未经明确确认,绝不运行 TRUNCATE/DROP

破坏性操作前的检查:

  1. 确认确切目标(表 / ID / 日期范围)
  2. 先运行 SELECT/行数统计并展示结果
  3. 请求最终确认,然后执行

参考资料

版本
  • postgresql-19.md — PostgreSQL 19(测试版):按领域整理的新功能、完整的不兼容变更列表、升级检查清单
架构与设计
  • table-design.md — 数据类型、约束、索引、分区、JSONB、安全的架构演进
  • charset-encoding.md — 字符集、编码、排序规则、ICU、区域设置
身份验证
运行时配置
内部机制
  • internals.md — 查询处理流水线、解析器/重写器/规划器/执行器、系统目录、线协议、访问方法
  • protocol.md — 线协议 v3.2:消息格式、启动、身份验证、查询、COPY、复制

链接

另请参阅

  • sql-expert — 查询模式、EXPLAIN 工作流、优化

评论

支持 Markdown