PostgreSQL テーブルを取り、Wiki 形式 (できれば Confluence) でデータ ディクショナリを出力するツールを探しています。ほとんどのツールは、このタスクを達成するために多くの手作業/複数のツールを必要とするようです (IE> SchemaSpy、DB Visual Architect、出力された HTML DD を取得して Confluence に変換するための Confluence プラグイン)。Postgres テーブルをスキャンし、Wiki に適したデータ ディクショナリを出力する 1 つのツールを探しています。これにより、他のツールでデータベースと DB スキーマを更新することなく、DB の変更に合わせてシームレスなメンテナンスが可能になります。
2 に答える
ボブ・スウィフトのConfluence SQLプラグインがあり、SQLクエリから派生したデータをConfluenceページに表示できます。たとえばテーブルとして..おそらく一見の価値がありますか?
Confluenceバージョン3.1.x-4.9.xは現在サポートされています...
プラグインは無料で、Atlassianのプラグインエクスチェンジからダウンロードできます:https ://plugins.atlassian.com/plugins/org.swift.confluence.sql
プラグインに関する追加情報は、 https ://studio.plugins.atlassian.com/wiki/display/SQL/Confluence+SQL+Pluginにあります。
これは自分でスクリプト化する必要があると思いますが、とても簡単で楽しいものです。ここではPythonを想定します。
ConfluenceXML-RPCインターフェースが好きです。そのためには、 http: //goo.gl/KCt3zを参照してください。気になるリモートメソッドは、login、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>
注:Confluenceはデフォルトでwikiマークアップを使用しなくなりました。HTMLを書く必要があります。
最後に、すべてのテーブルのページを作成する場合は、データベースに関する情報をテーブルとして含むinformation_schemaを確認できます。例えば:
select table_name from information_schema.tables where table_schema = current_schema();