首页
/ Atlas项目中Composite Schema配置的实践指南

Atlas项目中Composite Schema配置的实践指南

2025-06-01 09:29:48作者:侯霆垣

复合Schema的基本概念

Atlas项目中的composite_schema是一种将多个Schema源合并为单一Schema定义的功能。它允许开发者将不同来源的Schema定义组合在一起,比如将Ent生成的Schema与手动编写的SQL文件合并。

典型配置问题分析

在配置composite_schema时,开发者常会遇到以下典型问题:

  1. 数据库作用域冲突:当环境URL中包含search_path参数时,会与composite_schema的数据库作用域产生冲突。正确的做法是移除URL中的search_path参数。

  2. Schema定义顺序:在定义多个Schema源时,Atlas会按照声明的顺序依次应用这些Schema定义。后定义的Schema会基于前一个Schema的状态进行应用。

复合Schema的进阶用法

多Schema组合

开发者可以定义多个Schema源,例如同时使用Ent生成的Schema和手动编写的SQL文件:

data "composite_schema" "project" {
  schema "public" {
    url = "ent://schema"
  }
  schema "public" {
    url = "file://schema/schema.sql"
  }
}

在这种配置下,Atlas会先应用Ent生成的Schema,然后再应用SQL文件中定义的Schema变更。

跨Schema操作

当需要在不同的Schema中定义对象时,可以这样配置:

data "composite_schema" "project" {
  schema "public" {
    url = "ent://schema"
  }
  schema "foo" {
    url = "file://schema/schema.sql"
  }
}

这种配置会创建两个Schema:public和foo。需要注意的是,如果在SQL文件中引用了其他Schema中的对象,需要确保这些对象已经存在。

实际应用场景

一个常见的应用场景是使用Ent生成基础表结构,然后通过composite_schema添加Ent不支持的数据库对象,如触发器、存储过程等。例如:

-- 在SQL文件中定义触发器
CREATE OR REPLACE FUNCTION record_user_change()
RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO changes(id, entity_id)
    VALUES (gen_random_uuid(), NEW.id);
    RETURN NEW; 
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER users_after_change
AFTER INSERT OR UPDATE OR DELETE ON users
FOR EACH ROW EXECUTE FUNCTION record_user_change();

需要注意的是,由于Schema定义是按顺序应用的,确保在定义触发器之前,相关的表已经存在。

最佳实践建议

  1. 避免在环境URL中使用search_path参数
  2. 合理规划Schema定义的顺序
  3. 对于跨Schema引用,确保引用的对象已经存在
  4. 将Ent不支持的数据库对象放在单独的SQL文件中通过composite_schema引入

通过合理使用composite_schema功能,开发者可以更灵活地管理数据库Schema,结合代码生成和手动定义的优点,构建更完善的数据库结构。

登录后查看全文
热门项目推荐

项目优选

收起
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
54
469
kernelkernel
deepin linux kernel
C
22
5
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
880
519
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
336
1.1 K
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
181
264
cjoycjoy
一个高性能、可扩展、轻量、省心的仓颉Web框架。Rest, 宏路由,Json, 中间件,参数绑定与校验,文件上传下载,MCP......
Cangjie
87
14
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.09 K
0
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
361
381
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
612
60