采集源库的方法
Oracle为源库
Oracle源库对象的DDL信息如无特殊说明,都是通过DBMS_METADATA.get_ddl系统包函数获取的。
对象的基本信息从系统视图中获取,有DBA视图与ALL视图两种采集模式,以下以ALL视图采集模式进行说明:
INDEX:采集索引的时候,先从ALL_INDEXES视图里面查出所有的约束信息,然后把由主键或者唯一键约束自动创建的索引过滤掉(如果先创建了索引,然后创建约束,并且约束名和索引名相同,这种情况下索引也会被认为是由约束创建的,不会被采集)。
PostgreSQL为源库
以下是UGO对各个对象使用的采集方法:
- SCHEMA:使用 "CREATE SCHEMA " + schema名; 的拼接方式。
- TABLE:通过查询pg_catalog.pg_attribute、pg_catalog.pg_class、pg_catalog.pg_namespace、pg_inherits系统视图,获取表名、字段名、字段类型、以及表分区信息,拼接成CREATE TABLE语句。生成列、表约束、外键约束等信息未考虑。
- INDEX:通过查询pg_indexes视图的indexdef字段获取CREATE INDEX语句。
- VIEW:通过查询pg_views视图的definition字段获取视图的子查询,然后拼接成 CREATE VIEW语句。
- FUNCTION/PROCEDURE:通过pg_get_functiondef方法来获取CREATE FUNCTION 和 CREATE PROCEDURE语句。
- TRIGGER:通过pg_get_functiondef方法获取触发器函数的定义,再通过pg_get_triggerdef获取CREATE TRIGGER语句,然后拼接成完整的触发器定义语句。
由于PostgreSQL数据库中并未公开获取所有对象类型定义DDL的方法,因此部分对象的DDL将采用查询元数据拼接的方式获取。这可能导致采集的DDL信息和原始DDL不一致,甚至缺少信息的情况。
如果采集的DDL无法满足您的使用要求,您可以使用pg_dump或者第三方数据库客户端工具获取对象DDL,然后通过SQL语句转换进行SQL转换。