defnotwig/pg-safe-migrate

GitHub: defnotwig/pg-safe-migrate

一款专为 Node.js 设计的 PostgreSQL 安全迁移引擎,通过内置 Lint 规则、漂移检测和 CI 把关机制,帮助团队安全可靠地管理数据库 Schema 变更。

Stars: 1 | Forks: 0

# pg-safe-migrate [![npm version](https://img.shields.io/npm/v/pg-safe-migrate.svg)](https://www.npmjs.com/package/pg-safe-migrate) [![npm core](https://img.shields.io/npm/v/pg-safe-migrate-core.svg?label=core)](https://www.npmjs.com/package/pg-safe-migrate-core) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE) [![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue.svg)](https://www.typescriptlang.org/) [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D18-green.svg)](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) | [![npm](https://img.shields.io/npm/v/pg-safe-migrate.svg)](https://www.npmjs.com/package/pg-safe-migrate) | CLI 工具 | | [`pg-safe-migrate-core`](./packages/core) | [![npm](https://img.shields.io/npm/v/pg-safe-migrate-core.svg)](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, 咨询锁, 安全优先, 安全插件, 开源库, 搜索引擎爬虫, 数据完整性, 数据库版本控制, 数据库迁移, 文档结构分析, 校验和验证, 测试用例, 漂移检测, 自动化攻击, 自动化攻击, 自动化运维, 风险操作检测