postgresql 导出数据字典文档
项目上需要整理目前数据库的数据字典文档。项目不规范,这种文档只要后期来补。这么多张表,每个字段都写到word文档里真心头大。就算前面写了个查询表结构的sql,但是最后整理到word里还是感觉有点麻烦。以前写过一个oracle直接生成表结构的html文档,所以现在也想再弄个postgresql 版本的。查了一番文档,发现pg9.4不支持写文件。无奈放弃。最后选了一个这种方案,利用sql脚本中打印消息的功能。把生成的html文档打印出来,最后拷贝html文档代码到文本文件中保存,虽然比oracle那个麻烦了点,总算能得到想要的html文档了。
slq脚本:
--1.0
--2015-11-30
--postgresql-9.4.5
--打印出数据字典html
--执行完毕,在pgAdmin的消息窗口,把打印内容拷贝到文本文件中,替换掉多余的输出:[PGSCRIPT ] ,删除头部的[QUERY ]及打印出的查询语句,
--最后把文件另存为.html文件。
--用浏览器打开保存的网页,然后拷贝页面内容到word文档中,下面整理格式就可以了
--注意:
--脚本里包含了详细版,和简版两个版本的数据字典,使用的时候注意切换到对应的标题
--'<tr><td>列名</td><td>类型</td><td>长度</td><td>主键约束</td><td>唯一约束</td><td>外键约束</td><td>可否为空</td><td>描述</td></tr>';
--'<tr><td>列名</td><td>类型</td><td>描述</td></tr>';
--2016-2-16 修正表字段注释(描述)为空,字段不打印的问题
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[]=attnum and contype='p')>0 then 'Y' else 'N' end),
(case when (select count(*) from pg_constraint where conrelid=a.attrelid and conkey[]=attnum and contype='u')>0 then 'Y' else 'N' end),
(case when (select count(*) from pg_constraint where conrelid=a.attrelid and conkey[]=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 '<!DOCTYPE html>';
print '<html>';
print '<head>';
print '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
print '<title>数据字典</title>';
print '<style type="text/css">';
print 'table { border-collapse: collapse; border-spacing: 0;}';
print 'table td {border: solid 1px #000;}';
print '</style>'; set @i=0;
while @i < lines(@table)
begin
set @table_name = @table[@i][];
print @table[@i][];
print '<table>';
print '<tr><td>列名</td><td>类型</td><td>长度</td><td>主键约束</td><td>唯一约束</td><td>外键约束</td><td>可否为空</td><td>描述</td></tr>';
--print '<tr><td>列名</td><td>类型</td><td>描述</td></tr>';
set @j=0;
while @j < lines(@att)
begin
if @att[@j][] = @table_name
begin
--详细
print '<tr><td>';
print @att[@j][];
print '</td><td>';
print @att[@j][];
print '</td><td>';
print @att[@j][];
print '</td><td>';
print @att[@j][];
print '</td><td>';
print @att[@j][];
print '</td><td>';
print @att[@j][];
print '</td><td>';
print @att[@j][];
print '</td><td>';
print @att[@j][];
print '</td></tr>';
--简版
/*print '<tr><td>';
print @att[@j][1];
print '</td><td>';
print @att[@j][2];
print '</td><td>';
print @att[@j][3];
print '</td></tr>';*/
end
set @j=@j+1;
end
print '</table>';
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) as 主键约束,
(case when (select count(*) from pg_constraint where conrelid=a.attrelid and conkey[1]=attnum and contype='u')>0 then 'Y' else 'N' end) as 唯一约束,
(case when (select count(*) from pg_constraint where conrelid=a.attrelid and conkey[1]=attnum and contype='f')>0 then 'Y' else 'N' end) as 外键约束,
(case when a.attnotnull=true then 'Y' else 'N' end) as 可否为空,
col_description(a.attrelid,a.attnum) as 描述
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 表名,attnum; --数据字典--简版
select
(select relname from pg_class where oid=a.attrelid) as table_name,
(select (select description from pg_description where objoid = oid and objsubid = 0) ||'表'||'('||relname ||')' from pg_class where oid=a.attrelid) as 表名,
a.attname as 列名,
format_type(a.atttypid,a.atttypmod) as 类型,
col_description(a.attrelid,a.attnum) as 描述
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;
*/
postgresql 导出数据字典文档的更多相关文章
- Mysql数据库导出数据字典文档Word或者HTML的3个工具
最近需要将Mysql的数据库导出一份Word的文档出来,本文记录调研后几个可用的工具和方法: 阿里云DMS工具导出 适用于存储在阿里云RDS服务中的Mysql数据库 导出格式支持:Word.Excel ...
- struts2中利用POI导出Excel文档并下载
1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ...
- .NET通过调用Office组件导出Word文档
.NET通过调用Office组件导出Word文档 最近做项目需要实现一个客户端下载word表格的功能,该功能是用户点击"下载表格",服务端将该用户的数据查询出来并生成数据到Word ...
- 使用PHP导出Word文档的原理和实例
PHP操作Word文档的方法有很多,这里再为大家提供一种方法. 原理 一般,有2种方法可以导出doc文档,一种是使用com,并且作为php的一个扩展库安装到服务器上,然后创建一个com,调用它的方 ...
- C# 导出word文档及批量导出word文档(1)
这里用到了两个dll,一个是aspose.word.dll,另外一个是ICSharpCode.SharpZipLib.dll,ICSharpCode.SharpZipLib.dll是用于批量 ...
- 使用OpenXml实现生成数据字典文档(beta)
最近项目在走验收流程,之前没有仔细看SOW文档,发现需要补好多份文档,其中就有数据字典,项目组不愿意花时间太多的时间弄这些文档,也不希望以后还要重复劳动力,最终决定做一个工具,方便自己生成数据字典文档 ...
- C# 导出word文档及批量导出word文档(4)
接下来是批量导出word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用 ...
- 使导出excle文档实现ALT+Enter的效果()
JAVA中输入什么转义字符,使导出excle文档实现ALT+Enter的效果?或者有没有其他方法可以实现. 20 JAVA中输入什么转义字符,使导出excle文档实现ALT+Enter的效果?或者有没 ...
- C#导出Word文档开源组件DocX
1.帮助文档,这东西找了很久,而且它版本很旧,还是英文,W8.1系统上打不开 http://download.csdn.net/detail/zuofangyouyuan/7673573 2.开源网址 ...
随机推荐
- linux NFS 配置步骤
转载 http://woxihuanpes.blog.163.com/blog/static/12423219820097139145238/ NFS server可以看作是一个FILE SERVER ...
- 再次学习 java 类的编译
做JAVA开发的都知道myeclipse, 我们在myeclipse中新建一个类,然后保存, 如何正常的话,那么在项目指定的目录(也就是项目的output目录)就会生成同名的class文件, 可是,我 ...
- Jquery事件
在JS里加事件 <input type="button" value="测试" onclick="test()"/>跟一个函数 ...
- Angular页面传参的四种方法
1. 基于ui-router的页面跳转传参 (1)在Angular的app.js中用ui-route定义路由,比如有两个页面, 一个页面(producers.html)放置了多个producers,点 ...
- android笔记:获取View组件宽度以及ViewTreeObserver
View宽高测量方法: 测量方法有三种,如下: 1)(直接在onCreate()执行) int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureS ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统-分配角色给用户
系列目录 由于之前做了将权限赋给角色,还需要做将角色组赋给用户,和将用户赋给角色组,一个用户可以拥有多个角色组,一个角色组包含多个用户,打开模块管理,添加一个分配的操作码 并在 角色权限设置授权给他 ...
- Java jacob调用打印机打印word文档
前面说了Java如何生成复杂的Word文档,今年记录下Java如何调用打印机打印word文档. 起初用的是自带的PrintJob,但是系统提供的打印机制并不成熟完整.网上的代码也是千篇一律,在我的打印 ...
- 基于WebGL 的3D呈现A* Search Algorithm
http://www.hightopo.com/demo/astar/astar.html 最近搞个游戏遇到最短路径的常规游戏问题,一时起兴基于HT for Web写了个A*算法的WebGL 3D呈现 ...
- git 版本回退
由于操作失误,需要将代码进行版本回退,首先在本地仓库执行了“git reset --hard HEAD^”命令,这样只会回退本地仓库的代码,但是我的代码之前已经push到了远程库中,查看远程仓库,发现 ...
- StackExchange.Redis帮助类解决方案RedisRepository封装(基础配置)
本文版权归博客园和作者吴双本人共同所有,转载和爬虫,请注明原文地址.http://www.cnblogs.com/tdws/p/5815735.html 写在前面 这不是教程,分享而已,也欢迎园友们多 ...