将Progress OpenEdge列描述导出为PostgreSQL表列注释
从Progress OpenEdge提取列注释生成PostgreSQL COMMENT语句
没问题,我来帮你搞定这个!Progress OpenEdge自带了一套系统元数据表,咱们可以直接查询这些表获取列注释,然后生成你需要的PostgreSQL注释语句。下面是具体步骤:
1. 理解Progress OpenEdge的元数据表
Progress用以下核心系统表存储表和列的元数据:
_File:存储数据库中所有表的信息,包括表名、所属数据库、表注释等_Field:存储所有列的信息,通过_FILE字段关联到_File表的RECID,其中COMMENTS字段就是你需要的列注释
2. 编写Progress SQL查询提取注释
连接到你的data数据库后,执行以下SQL查询,就能获取所有用户表的列注释(排除系统表):
SELECT fi.FILE-NAME AS table_name, f.FIELD-NAME AS column_name, f.COMMENTS AS comment_text FROM _Field f JOIN _File fi ON f._FILE = fi.RECID WHERE -- 排除Progress自带的系统表(以_开头) fi.FILE-NAME NOT LIKE '_%' -- 指定目标数据库为data AND fi.DBNAME = 'data' -- 只提取有注释的列,避免生成空注释语句 AND f.COMMENTS IS NOT NULL ORDER BY fi.FILE-NAME, f.FIELD-NAME;
你可以通过Progress的SQL Explorer工具,或者使用prosql命令行工具来执行这个查询,然后把结果导出为CSV格式。
3. 转换结果为PostgreSQL COMMENT语句
接下来需要把查询结果转换成PostgreSQL的注释语法。这里有几个关键点要注意:
- Progress的表名/列名可能保留大小写,所以在PostgreSQL里要用双引号包裹,避免自动转成小写
- 如果注释里包含单引号,需要转义为两个单引号(
''),否则PostgreSQL会报错
示例转换逻辑
假设你导出的CSV结果如下:
table_name,column_name,comment_text customer,cust_id,客户唯一标识 order,order_date,订单创建日期('下单当日生效')
你可以用简单的脚本(比如Python、awk)或者Excel公式来生成目标SQL:
COMMENT ON COLUMN public."customer"."cust_id" IS '客户唯一标识'; COMMENT ON COLUMN public."order"."order_date" IS '订单创建日期(''下单当日生效'')';
快速Python脚本示例
如果用Python处理CSV,代码大概是这样:
import csv with open('progress_comments.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) with open('pg_comments.sql', 'w', encoding='utf-8') as out: for row in reader: table = row['table_name'].strip() column = row['column_name'].strip() comment = row['comment_text'].strip().replace("'", "''") sql = f"COMMENT ON COLUMN public.\"{table}\".\"{column}\" IS '{comment}';\n" out.write(sql)
4. 额外提示
- 如果需要提取表级注释,可以查询
_File表的COMMENTS字段,生成COMMENT ON TABLE public."{table_name}" IS '{comment_text}';语句 - 执行生成的SQL前,先在测试环境验证,确保表和列名匹配,注释转义正确
内容的提问来源于stack exchange,提问作者KuKeC
相关产品推荐
相关产品推荐

