尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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-templateLuminus-template 是 Clojure 社区最流行的 Web 项目脚手架它通过一条命令即可生成带数据库、认证、前端等完整能力的应用骨架。对于新手开发者来说最大的困惑往往不是怎么写业务代码而是数据库结构如何随代码一起演进。本文将以 Luminus-template 内置的 luminus-migrations 为例手把手教你用 up/down 迁移文件管理 SQL 版本告别手动改表、到处同步建表语句的混乱日子。为什么需要数据库迁移工具团队协作时如果每个人都在自己的数据库里手动执行ALTER TABLE很快就会出现我本地能跑、你本地报错的尴尬局面。数据库迁移Migration把每一次结构变更固化成带时间戳的 SQL 文件让所有环境开发、测试、生产按同一顺序执行同一批脚本实现数据库版本与代码版本同步演进。Luminus-template 默认集成了luminus-migrations与conman两个依赖关系型数据库PostgreSQL、MySQL、H2、SQLite开箱即用。相关依赖声明可以在 db.clj 中看到。迁移文件在项目中的位置使用模板生成项目后resources/migrations目录就是你的数据库版本仓库每个迁移都由一对文件组成时间戳-名称.up.sql正向迁移执行结构变更时间戳-名称.down.sql反向迁移回滚本次变更模板自带的用户表示例就是一对标准迁移文件add-users-table.up.sql 负责建表配套的down.sql负责DROP TABLE。命名规则参考 db.clj时间戳精确到秒保证执行顺序稳定。最快配置方法三步跑通首次迁移拿到新项目后按下面的顺序操作即可让数据库活起来在数据库中创建应用所需的空数据库修改dev-config.edn与test-config.edn里的:database-url填入库名和账号密码在项目根目录执行lein run migrate命令执行后luminus-migrations 会读取resources/migrations下所有未执行的迁移文件按时间戳顺序依次应用并在数据库中记录已执行版本。这套初始化流程在模板自带的说明文档 db_instructions.md 中有完整描述。如何编写一对优雅的迁移文件新增一个文章表的迁移只需两条命令在resources/migrations下创建20260820120000-add-posts-table.up.sql创建同名的20260820120000-add-posts-table.down.sqlup 文件负责建表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回滚前需确保应用能正常连接到数据库。如果你使用了 DatomicLuminus-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),仅供参考
RELATED

相关推荐

美团面试题:Hashmap的结构,1.7和1.8有哪些区别,深入的分析

美团面试题:Hashmap的结构,1.7和1.8有哪些区别,深入的分析

(一) 真实面试题之:Hashmap的结构,1.7和1.8有哪些区别不同点: (1)JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1.7…

📅 2026/10/21 10:22:30
Jmeter之函数助手

Jmeter之函数助手

函数助手:通过里面函数的返回值作为参数 一、__counter 1.功能 每次调用计数器函数都会产生一个新值,从1开始每次加1。支持多线程(多用户):计数器既可以被配置成针对每个虚拟用户是独立的,也可以被配置成所…

📅 2026/10/13 14:00:57
Max抢票机器人:零基础3步配置到全自动抢票的教程

Max抢票机器人:零基础3步配置到全自动抢票的教程

Max抢票机器人:零基础3步配置到全自动抢票的教程 【免费下载链接】tix_bot Max搶票機器人(maxbot) help you quickly buy your tickets 项目地址: https://gitcode.com/gh_mirrors/ti/tix_bot 🎯 一句话说清:这个抢票机器人能干什么 …

📅 2026/10/13 10:41:47
MORE NEWS

更多资讯

📰

低成本长视频理解新思路:智能导航先找关键片段

这两年做长视频理解的同行,应该都有同一个感受:短视频赛道的模型已经卷到天上,但一碰到长视频,大家又集体回到原始社会。要么把视频抽帧抽到地老天荒,要么把整段视频暴力塞进上下文,显卡当场冒烟。我自己做…

📰

Java调用Kubernetes创建Pod的底层原理与生产实践

1. 这不是“调个API”那么简单:Java调用K8s创建Pod的本质是什么“Java调用K8s创建Pod”这九个字,表面看是两套技术栈的简单对接——后端语言连上容器编排平台。但干过三年以上K8s落地项目的人都清楚,这背后根本不是写几行RestTemplate就能搞定…

📰

RK3588 Android 12设备权限修改:从chmod到SELinux

1. 场景先行:你遇到的"设备权限问题"到底属于哪一类经常有做 RK3588 项目的朋友问我类似的问题:"我在 Android 12 上访问 /dev/ttyS4 报 permission denied,设备权限怎么改?" 说实话,这个问题没法…

📰

语音识别入门实战:从原理到搭建可运行的转写系统

语音识别(ASR)是这几年普及速度最快的 AI 技术之一。手机输入法、会议转写、客服质检、字幕生成,背后都离不开同一套"把声音变成文字"的链路。对新手来说,最大的障碍不是原理复杂,而是不知道从哪儿下手——网…

📰

可解释性AI落地指南:LIME与SHAP工具选型及避坑实践

如果你在业务里待过,一定见过这种场景:模型上线前,业务方的第一反应不是问你 AUC 涨了多少,而是问“它凭什么给这个客户打了低分”。你说“这是 GBST 模型的输出”,对方只会皱着眉摇头。这就是可解释性人工智能要解决的…

📰

欧拉公式:数学中最优雅的常数统一之美

1. 从一条“最美公式”说起:欧拉公式到底是什么我在刚开始接触高等数学的时候,就被一条公式深深震撼过。它不是那种需要背很多前提才能记住的复杂结论,恰恰相反,它简洁到可以用一行写完。这条公式就是欧拉公式:e^ix c…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬