技能 postgresql
📦

postgresql

安全

设计 PostgreSQL 数据库架构

也可从以下获取: 2025Emma,2025Emma

数据库架构设计错误会导致性能问题和数据完整性问题。此技能提供针对 PostgreSQL 的最佳实践,包括数据类型、索引、约束和可扩展性模式。

支持: Claude Codex Code(CC)
📊 71 充足
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“postgresql”。 设计一个包含 email、name 和时间戳的 users 表

预期结果:

  • CREATE TABLE users (
  • user_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  • email TEXT NOT NULL UNIQUE,
  • name TEXT NOT NULL,
  • created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  • updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
  • );
  • CREATE UNIQUE INDEX ON users (LOWER(email));

正在使用“postgresql”。 我应该使用 UUID 还是 BIGINT 作为主键?

预期结果:

  • 在以下情况下使用 BIGINT GENERATED ALWAYS AS IDENTITY:
  • - 顺序 ID 可接受
  • - 索引性能至关重要
  • - 较小的索引大小很重要
  •  
  • 在以下情况下使用 UUID:
  • - 需要全局唯一性
  • - ID 不透明性是安全要求
  • - 从多个源合并数据

安全审计

安全
v1 • 2/24/2026

All 221 static analyzer findings were determined to be false positives. The skill consists entirely of markdown documentation (SKILL.md) with no executable code. Backtick characters are markdown formatting for code examples, not shell execution. References to security features like Row Level Security are PostgreSQL documentation, not Windows SAM access. The skill provides educational guidance for database schema design with no security risks.

1
已扫描文件
233
分析行数
0
发现项
1
审计总数
未发现安全问题
审计者: claude

质量评分

38
架构
100
可维护性
87
内容
32
社区
100
安全
91
规范符合性

你能构建什么

新应用程序架构设计

为新的 Web 应用程序设计完整的数据库架构,包括适当的数据类型、主键、外键关系以及常见查询模式的索引。

架构审查和优化

审查现有表设计,查找性能问题、缺失的索引、不合适的数据类型或可能导致数据完整性问题的约束缺陷。

迁移规划

规划安全的架构演进,包括事务性 DDL、并发索引创建以及在不停机的情况下向大表添加列的策略。

试试这些提示

基本表设计
设计一个用于存储用户配置文件的 PostgreSQL 表,包含 email、name、registration date 和可选配置设置字段。使用适当的数据类型和约束。
索引策略
我有一个查询表,包含列:id、user_id、status、created_at。常见查询按 user_id 和 status 过滤,并按 created_at 降序排序。推荐索引策略。
JSONB 设计决策
我应该在 JSONB 列中存��产品属性还是创建单独的列?属性因产品类别而异,用户经常按特定属性搜索。
大表分区
我有一个事件表,每月增长 1000 万行。查询通常按 event_date 和 device_id 过滤。推荐分区策略并解释权衡。

最佳实践

  • 对所有事件时间戳使用 TIMESTAMPTZ 而不是 TIMESTAMP,以避免时区混淆
  • 在外键列上添加显式索引,因为 PostgreSQL 不会自动创建它们
  • 首先规范化到 3NF,然后仅对已证明的高投资回报率读取性能提升进行反规范化

避免

  • 使用带长度限制的 VARCHAR 而不是带 CHECK 约束的 TEXT
  • 在不分析实际查询模式的情况下为每列创建索引
  • 对自增列使用 SERIAL 而不是 GENERATED ALWAYS AS IDENTITY

常见问题

字符串列应该使用 TEXT 还是 VARCHAR?
在大多数情况下使用 TEXT。PostgreSQL 以相同方式存储 TEXT 和 VARCHAR。如果需要长度验证,请添加 CHECK 约束而不是使用 VARCHAR(n)。
需要为外键列创建���引吗?
是的。PostgreSQL 不会自动为外键列创建索引。在外键列上添加显式索引以提高连接性能,并防止父行删除期间的锁定问题。
何时应该使用 JSONB 而不是常规列?
对可选、可变或半结构化属性使用 JSONB。将核心关系数据保留在常规列中。始终为 JSONB 列添加 GIN 索引以支持包含查询。
TIMESTAMP 和 TIMESTAMPTZ 有什么区别?
TIMESTAMPTZ 存储具有时区意识的时间戳并在内部转换为 UTC。TIMESTAMP 存储没有时区上下文的字面值。始终使用 TIMESTAMPTZ 以避免时区错误。
我应该对表进行分区吗?
对于超过 1 亿行且查询始终按分区键(如日期)过滤的表,考虑分区。分区会增加复杂性,因此仅在存在明显好处时使用。
如何安全地向大��添加 NOT NULL 列?
首先将列添加为 NULL,回填数据,然后更改为 NOT NULL。添加带有易变默认值(如 now())的 NOT NULL 会导致完整的表重写。使用非易变默认值或多步骤迁移。

开发者详情

文件结构

📄 SKILL.md