2011-07-07 22 views
7

私はPostgreSQLのテーブルを取ってwikiフォーマット(好ましくはConfluence)でデータディクショナリを出力するツールを探しています。ほとんどのツールは、このタスク(IE> SchemaSpy、DBビジュアルアーキテクト、出力されたHTML DDを受け取り、Confluenceに変換するためのConfluenceプラグイン)を達成するための多くの手動作業/複数のツールが必要です。私は自分のPostgresテーブルをスキャンし、他のツールでデータベースとDBスキーマを更新することなく、DBが変更されたときにシームレスな保守を可能にするwikiフレンドリーなデータディクショナリを出力する1つのツールを探しています。PostgreSQL - Confluence Wikiのデータディクショナリジェネレータ

+0

簡単な答えはないようです。しかし、Pyrseasを使ってDB構造のYAML出力を得ることも、SchemaSpyを使ってXML出力することもできます。 残りはすべて「yaml to wiki」または「xml to wiki」コンバータです...ロケット科学ではありません。 – filiprem

+1

実際にあなたが私を雇うなら、そのようなyaml-to-wikiコンバータを書くことができます:-) – filiprem

+0

'wiki format'の意味は?ヘッダー1つのテーブル、ヘッダー2の種類ごとに1つのページが必要ですか?または、専用のページを指す各テーブルの一覧が必要ですか? – vyegorov

答えて

1

ボブスウィフトの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

0

私はあなた自身でこのスクリプトを書かなければならないと思いますが、それはかなり簡単で楽しいと思います。ここではPythonを想定します。

私はConfluence XML-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(); 
関連する問題