2011-07-07 96 views
7

我正在寻找一个采用PostgreSQL表格并以wiki格式(最好是Confluence)输出数据字典的工具。似乎大多数工具需要大量的手动工作/多种工具来完成这项任务(IE> SchemaSpy,DB Visual Architect,Confluence插件取出输出的HTML DD并转换为Confluence)。我正在寻找一款能够扫描我的Postgres表的工具,并输出一个维基友好的数据字典,可以在数据库更改时进行无缝维护,而无需更新其他工具中的数据库和数据库模式。用于PostgreSQL的数据字典生成器到Confluence维基

+0

看起来没有简单的答案。但是,您可以使用Pyrseas获取您的数据库结构的YAML输出,或使用SchemaSpy获取XML输出。 其余的部分是“yaml to wiki”或“xml to wiki”转换器...不是火箭科学。 – filiprem

+1

其实我可以写这样的yaml-to-wiki转换器如果你雇用我:-) – filiprem

+0

你的意思是'wiki格式'?你需要一个单页面,每个表头Header1,每个类型Header2?或者你需要一个表格列表,每个表格指向一个专用的页面? – vyegorov

回答

0

我想你必须自己编写脚本,但它很容易和有趣。我会在这里假设Python。

我喜欢Confluence XML-RPC接口。为此,请参阅http://goo.gl/KCt3z。您关心的远程方法可能是登录,getPage,setPage和/或updatePage。此骨架将如下所示:

import xmlrpclib 

server = xmlrpclib.Server(opts.url) 
conn = server.confluence1 
token = conn.login(opts.username, opts.password) 
page = conn.getPage(token,'PageSpace',page_title) 
page = page + table 
page = conn.updatePage(token,page,update_options) 

table这里是来自PG表的数据。我们将在下面构建。

对于从PostgreSQL中提取简单数据,我经常使用psycopg2(也考虑SQLSoup)。无论您如何获取数据,最终都会以行列表作为字典。数据库部分可能如下所示:

import psycopg2, psycopg2.extras 

conn = psycopg2.connect("dbname=reece") 
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) 
cur.execute('SELECT * FROM sometable') 
rows = cur.fetchall() 

现在您需要格式化数据。对于简单的东西,print =语句将起作用。对于更复杂的格式,请考虑一个模板引擎,如jinja2(http://jinja.pocoo.org/)。渲染代码可能是这样的:

from jinja2 import Template 
template = Template(open(template_path).read()) 
table = template.render(rows = rows) 

文件template_path将包含格式模板,它可能看起来像:

<table> 
<tr> 
    <th>col header 1</th> 
    <th>col header 2</th> 
</tr> 

{% for row in rows|sort -%} 
<tr> 
    <td>{{row.col1}}</td> 
    <td>{{row.col2}}</td> 
</tr> 
{% endfor %} 

</table> 

注:合流不再默认使用wiki标记。你应该写HTML。

最后,如果要为所有表制作页面,可以查看information_schema,其中包含有关数据库信息的表格。例如:

select table_name from information_schema.tables where table_schema = current_schema();