defnotwig/pg-safe-migrate
GitHub: defnotwig/pg-safe-migrate
一款专为 Node.js 设计的 PostgreSQL 安全迁移引擎,通过内置 Lint 规则、漂移检测和 CI 把关机制,帮助团队安全可靠地管理数据库 Schema 变更。
Stars: 1 | Forks: 0
# pg-safe-migrate
[](https://www.npmjs.com/package/pg-safe-migrate)
[](https://www.npmjs.com/package/pg-safe-migrate-core)
[](./LICENSE)
[](https://www.typescriptlang.org/)
[](https://nodejs.org/)
**面向 Node.js 的安全至上 PostgreSQL 迁移引擎**
pg-safe-migrate 通过强制执行安全规则、检测漂移并提供清晰的护栏,帮助团队自信地发布 Schema 变更——所有这些都可以通过简单的 CLI 或编程 API 实现。
## 功能特性
- **安全 Linter** — 10 条内置规则默认阻止有风险的 Schema 操作
- **漂移检测** — SHA-256 校验和确保已应用的迁移是不可变的
- **Advisory locks** — 通过 PostgreSQL advisory locks 保证单运行器执行
- **事务策略** — `auto` | `always` | `never`,并智能检测 `CONCURRENTLY` 语句
- **覆盖系统** — 通过 SQL 注释实现显式、可审计的覆盖,并需要提供原因
- **CI 就绪** — `check` 命令可作为 CI 把关点,并提供 GitHub Action 包装器
- **编程 API** — 在您的应用程序中直接使用核心库
## 快速开始
```
# 安装
npm install -g pg-safe-migrate
# 在项目中初始化
pg-safe-migrate init
# 创建 migration
pg-safe-migrate create add_users_table
# 编辑 ./migrations/ 中生成的文件
# 然后应用:
export DATABASE_URL=postgresql://localhost/mydb
pg-safe-migrate up
# 检查状态
pg-safe-migrate status
```
## 包
| Package | Version | Description |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------- |
| [`pg-safe-migrate`](./packages/cli) | [](https://www.npmjs.com/package/pg-safe-migrate) | CLI 工具 |
| [`pg-safe-migrate-core`](./packages/core) | [](https://www.npmjs.com/package/pg-safe-migrate-core) | 核心库 (编程 API) |
## 入门模板
使用生产就绪的入门模板快速上手:
| Template | Stack | Description |
| --------------------------------------------------------------------------------- | -------------------- | -------------------------------------- |
| [express-postgres-starter](https://github.com/defnotwig/express-postgres-starter) | Express + TypeScript | 内置安全迁移的 REST API |
| [nextjs-postgres-starter](https://github.com/defnotwig/nextjs-postgres-starter) | Next.js + TypeScript | 具备迁移工作流的全栈应用 |
## 文档
- [入门指南](./docs/getting-started.md)
- [配置](./docs/configuration.md)
- [安全规则](./docs/safety-rules.md)
- [覆盖](./docs/overrides.md)
- [零停机模式](./docs/zero-downtime.md)
- [GitHub Action](./docs/github-action.md)
- [生态与集成](./docs/ecosystem-narrative.md)
- [采用路线图](./docs/adoption-roadmap.md)
## CI 把关示例
向您的 GitHub Actions 工作流添加安全检查:
```
- uses: defnotwig/pg-safe-migrate/action@v1
with:
command: check
database_url: ${{ secrets.DATABASE_URL }}
```
或手动运行:
```
pg-safe-migrate check --database $DATABASE_URL
```
如果违反任何安全规则或检测到漂移,则返回退出代码 1。
## 为什么选择 pg-safe-migrate?
| Feature | pg-safe-migrate | node-pg-migrate | graphile-migrate | dbmate |
| ---------------------- | :-------------: | :-------------: | :--------------: | :----: |
| 内置安全 Linter | ✅ 10 条规则 | ❌ | ❌ | ❌ |
| 漂移检测 | ✅ SHA-256 | ❌ | ⚠️ 基于哈希 | ❌ |
| Advisory locks | ✅ | ❌ | ✅ | ❌ |
| CONCURRENTLY 检测 | ✅ 自动 | 手动 | ❌ | ❌ |
| 覆盖系统 | ✅ 可审计 | N/A | N/A | N/A |
| CI 把关命令 | ✅ `check` | ❌ | ❌ | ❌ |
| GitHub Action | ✅ | ❌ | ❌ | ❌ |
| Down migrations | ✅ 可选 | ✅ | ❌ | ✅ |
| TypeScript | ✅ 原生 | ✅ | ✅ | Go |
## 致谢
特别感谢所有通过代码、文档和反馈帮助改进 pg-safe-migrate 的贡献者。
## 许可证
MIT
标签:CISA项目, GitHub Action, GNU通用公共许可证, LNA, MITM代理, Node.js, PostgreSQL, Schema管理, SQL Linter, TypeScript, Zenmap, 咨询锁, 安全优先, 安全插件, 开源库, 搜索引擎爬虫, 数据完整性, 数据库版本控制, 数据库迁移, 文档结构分析, 校验和验证, 测试用例, 漂移检测, 自动化攻击, 自动化攻击, 自动化运维, 风险操作检测