slq脚本:
--1.0
--2015-11-30
--postgresql-9.4.5
--打印出数据字典html
--执行完毕,在pgAdmin的消息窗口,把打印内容拷贝到文本文件中,替换掉多余的输出:[PGSCRIPT ] ,删除头部的[QUERY? ? ]及打印出的查询语句,
--最后把文件另存为.html文件。
--用浏览器打开保存的网页,然后拷贝页面内容到word文档中,下面整理格式就可以了
--注意:
--脚本里包含了详细版,和简版两个版本的数据字典,使用的时候注意切换到对应的标题
--'
| 列名 | 类型 | 长度 | 主键约束 | 唯一约束 | 外键约束 | 可否为空 | 描述 |
';
--'| 列名 | 类型 | 描述 |
';
begin
? ? --查询表名
? ? set @table = select distinct relname, relname||'('||(select description from pg_description where objoid = oid and objsubid = 0) ||'表'||')' as table_name
? ? ? ? ? ? ? ? from pg_class c,pg_attribute a
? ? ? ? ? ? ? ? where c.oid=a.attrelid
? ? ? ? ? ? ? ? and attstattarget=-1
? ? ? ? ? ? ? ? and attrelid in(select oid from pg_class where relname in (select relname as table_name from pg_class where relkind='r' and relname like 'exg_%' order by relname))
? ? ? ? ? ? ? ? order by table_name;
? ? --数据字典(详细版):列名 类型 长度 主键约束 唯一约束 外键约束 可否为空 描述? ? ? ?
? ? set @att = select (select relname from pg_class where oid=a.attrelid) as table_name,
? ? ? ? ? ? '| '||a.attname||' | '
? ? ? ? ? ? ||''||format_type(a.atttypid,a.atttypmod)||' | '
? ? ? ? ? ? ||''||(case when atttypmod-4>0 then atttypmod-4 else 0 end)||' | '
? ? ? ? ? ? ||''||(case when (select count(*) from pg_constraint where conrelid=a.attrelid and conkey[1]=attnum and contype='p')>0 then 'Y' else 'N' end)||' | '
? ? ? ? ? ? ||''||(case when (select count(*) from pg_constraint where conrelid=a.attrelid and conkey[1]=attnum and contype='u')>0 then 'Y' else 'N' end)||' | '
? ? ? ? ? ? ||''||(case when (select count(*) from pg_constraint where conrelid=a.attrelid and conkey[1]=attnum and contype='f')>0 then 'Y' else 'N' end)||' | '
? ? ? ? ? ? ||''||(case when a.attnotnull=true then 'Y' else 'N' end)||' | '
? ? ? ? ? ? ||''||col_description(a.attrelid,a.attnum)||' |
'
? ? ? ? ? ? from pg_attribute a where attstattarget=-1 and attrelid in(select oid from pg_class where relname in (select relname as table_name from pg_class where relkind='r' and relname like 'exg_%' order by relname))
? ? ? ? ? ? order by table_name,attnum;
/*
? ? --数据字典(简版):列名 类型 描述
? ? set @att = select (select relname from pg_class where oid=a.attrelid) as table_name,
? ? ? ? ? ? '| '||a.attname||' | '
? ? ? ? ? ? ||''||format_type(a.atttypid,a.atttypmod)||' | '
? ? ? ? ? ? ||''||col_description(a.attrelid,a.attnum)||' |
'
? ? ? ? ? ? from pg_attribute a
? ? ? ? ? ? where attstattarget=-1
? ? ? ? ? ? and attrelid in(select oid from pg_class where relname in (select relname as table_name from pg_class where relkind='r' and relname like 'exg_%' order by relname))
? ? ? ? ? ? order by table_name,attnum;
? ? */
? ? --打印html文档
? ? print '';
? ? print '';
? ? print '';
? ? print '';
? ? print '数据字典';
? ? print '';
? ? set @i=0;
? ? while @i < lines(@table)
? ? begin
? ? ? ? set @table_name = @table[@i][0];
? ? ? ? print @table[@i][1];
? ? ? ? print '
';
? ? ? ? print '| 列名 | 类型 | 长度 | 主键约束 | 唯一约束 | 外键约束 | 可否为空 | 描述 |
';
? ? ? ? --print '| 列名 | 类型 | 描述 |
';
? ? ? ? set @j=0;
? ? ? ? while @j < lines(@att)
? ? ? ? begin
? ? ? ? ? ? if @att[@j][0] = @table_name
? ? ? ? ? ? begin
? ? ? ? ? ? print @att[@j][1];
? ? ? ? ? ? end
? ? ? ? ? ? set @j=@j+1;
? ? ? ? end
? ? ? ? print '
';
? ? ? ? set @i=@i+1;
? ? end
end
?
--附:
/*
--数据字典--详细版
select
(select relname ||'--'||(select description from pg_description where objoid = oid and objsubid = 0) from pg_class where oid=a.attrelid) as 表名,
a.attname as 列名,
format_type(a.atttypid,a.atttypmod) as 类型,
(case when atttypmod-4>0 then atttypmod-4 else 0 end) as 长度,
(case when (select count(*) from pg_constraint where conrelid=a.attrelid and conkey[1]=attnum and contype='p')>0 then 'Y' else 'N' end) a