news 2026/8/21 18:47:19

Luminus-template 数据库迁移指南:用 luminus-migrations 优雅管理 SQL 版本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Luminus-template 数据库迁移指南:用 luminus-migrations 优雅管理 SQL 版本

Luminus-template 数据库迁移指南:用 luminus-migrations 优雅管理 SQL 版本

【免费下载链接】luminus-templatea template project for the Luminus framework项目地址: https://gitcode.com/gh_mirrors/lu/luminus-template

Luminus-template 是 Clojure 社区最流行的 Web 项目脚手架,它通过一条命令即可生成带数据库、认证、前端等完整能力的应用骨架。对于新手开发者来说,最大的困惑往往不是怎么写业务代码,而是数据库结构如何随代码一起演进。本文将以 Luminus-template 内置的 luminus-migrations 为例,手把手教你用 up/down 迁移文件管理 SQL 版本,告别手动改表、到处同步建表语句的混乱日子。

为什么需要数据库迁移工具

团队协作时,如果每个人都在自己的数据库里手动执行ALTER TABLE,很快就会出现"我本地能跑、你本地报错"的尴尬局面。数据库迁移(Migration)把每一次结构变更固化成带时间戳的 SQL 文件,让所有环境(开发、测试、生产)按同一顺序执行同一批脚本,实现数据库版本与代码版本同步演进

Luminus-template 默认集成了luminus-migrationsconman两个依赖,关系型数据库(PostgreSQL、MySQL、H2、SQLite)开箱即用。相关依赖声明可以在 db.clj 中看到。

迁移文件在项目中的位置

使用模板生成项目后,resources/migrations目录就是你的"数据库版本仓库",每个迁移都由一对文件组成:

  • 时间戳-名称.up.sql:正向迁移,执行结构变更
  • 时间戳-名称.down.sql:反向迁移,回滚本次变更

模板自带的用户表示例就是一对标准迁移文件:add-users-table.up.sql 负责建表,配套的down.sql负责DROP TABLE。命名规则参考 db.clj,时间戳精确到秒,保证执行顺序稳定。

最快配置方法:三步跑通首次迁移

拿到新项目后,按下面的顺序操作即可让数据库"活"起来:

  1. 在数据库中创建应用所需的空数据库
  2. 修改dev-config.edntest-config.edn里的:database-url,填入库名和账号密码
  3. 在项目根目录执行lein run migrate

命令执行后,luminus-migrations 会读取resources/migrations下所有未执行的迁移文件,按时间戳顺序依次应用,并在数据库中记录已执行版本。这套初始化流程在模板自带的说明文档 db_instructions.md 中有完整描述。

如何编写一对优雅的迁移文件

新增一个"文章表"的迁移,只需两条命令:

  1. resources/migrations下创建20260820120000-add-posts-table.up.sql
  2. 创建同名的20260820120000-add-posts-table.down.sql

up 文件负责建表:

CREATE TABLE posts (id SERIAL PRIMARY KEY, title VARCHAR(100) NOT NULL, body TEXT, created_at TIMESTAMP DEFAULT now());

down 文件必须能完全撤销 up 的操作:

DROP TABLE posts;

编写时记住黄金法则:up 与 down 永远成对出现、彼此可逆。这样在任何环境上你都能放心地前进或回退。

回滚与进阶用法

当你需要撤销最近一次迁移时,执行:

lein run rollback

它会执行最近一个 down 文件。数据库连接由mount状态管理,启动入口在 sql.db.clj,回滚前需确保应用能正常连接到数据库。

如果你使用了 Datomic,Luminus-template 还提供了基于 EDN 事务的迁移方式,示例见 schema.edn,它通过命名空间化的规则(如:project-name/norm1)安装 schema 与初始化数据,思路与 SQL 迁移完全一致。

新手最容易踩的 3 个坑

  • 忘记成对文件:只写 up 不写 down,回滚时会直接报错找不到脚本
  • 修改已执行的迁移:迁移一经执行就不要改动,新增变更请新建迁移文件
  • 忽略执行顺序:文件名时间戳必须递增,否则依赖旧表的迁移会失败

掌握 luminus-migrations 之后,你会发现数据库结构的演进也可以像 Git 一样清晰、可追溯。从今天起,为你的每个 Luminus 项目建立规范的迁移习惯,让团队协作不再为"表结构对不对得上"而头疼。

【免费下载链接】luminus-templatea template project for the Luminus framework项目地址: https://gitcode.com/gh_mirrors/lu/luminus-template

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 18:43:58

用DevExpress实现基于HTMLCSS的桌面应用程序的UI(二)

DevExpress WinForm拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任…

作者头像 李华
网站建设 2026/8/21 18:38:45

【工作记录】F12导入接口信息至postman/apifox/jmeter

解决问题:无法快速获取接口参数信息 1. 复制为CURL 2. import导入postman,点击send请求,请求成功 2. import导入apifox,点击send请求,请求成功 3、import导入jmeter jmeter接口导入方式_jmeter导入文件接口-CSDN博客文…

作者头像 李华
网站建设 2026/8/21 18:34:17

1个OBS推3路:obs-multi-rtmp 多平台推流实操手册

1个OBS推3路:obs-multi-rtmp 多平台推流实操手册 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 昨晚推流,同时开了三个OBS,笔记本风扇直接起飞&…

作者头像 李华