SuperAPI AI 工具集

postgres-migrations

数据与分析

查看项目

更新于 10-16 00:30

技能介绍

这是一个关于 PostgreSQL 迁移的指南型技能,主要用途是帮助开发者在编写和执行数据库迁移时避开常见错误,并采用更规范的写法。

主要能力与内容:

  1. 常见报错处理:如“子查询引用了外层未分组列”,建议用 CTE 先聚合再关联;索引或生成列表达式中使用非 IMMUTABLE 函数(如 array_to_string、to_char、now)会报错,可创建 IMMUTABLE 包装函数解决。
  2. 扩展与权限:对 pg_trgm、uuid-ossp 等扩展,用 DO 块判断 pg_extension 是否存在,并在捕获 insufficient_privilege、feature_not_supported 时跳过相关索引。
  3. 幂等迁移:统一使用 CREATE TABLE IF NOT EXISTS、ALTER TABLE ... ADD COLUMN IF NOT EXISTS、CREATE INDEX IF NOT EXISTS、DROP ... IF EXISTS,使迁移可重复执行。
  4. 循环依赖:先建表不加外键,再用 ALTER TABLE 补加约束。
  5. 生成列:只能用 IMMUTABLE 函数,使用 STORED,不能引用其他生成列,也不能直接更新。
  6. 全文检索:用生成列拼接 setweight(to_tsvector(...)) 并建立 GIN 索引,查询用 websearch_to_tsquery。
  7. 索引与性能:复合索引遵循等值在前、范围次之、排序最后的原则,可用部分索引;迁移后执行 ANALYZE、VACUUM、EXPLAIN ANALYZE。
  8. 常用模式:自动更新时间戳触发器、软删除(deleted_at + 部分索引 + 视图)、枚举(CHECK 或 ENUM)、JSONB 及表达式索引。
  9. 迁移文件结构示例与检查清单,以及本地测试命令,如 npm run migrate、docker-compose logs postgres、docker-compose exec postgres psql -U prpm -d prpm_registry -c "\d packages" 和 \di。

限制:资料为通用实践整理,未提供具体版本兼容性、价格或平台信息;示例表结构仅供参考,实际使用需结合自身数据库环境验证。