2011-07-07 31 views
7

Tôi đang tìm một công cụ để đưa các bảng PostgreSQL và xuất ra một Từ điển dữ liệu theo định dạng wiki (tốt nhất là Confluence). Nó có vẻ như hầu hết các công cụ hiện có yêu cầu rất nhiều công việc thủ công/nhiều công cụ để thực hiện nhiệm vụ này (IE> SchemaSpy, DB Visual Architect, Confluence bổ sung để đưa ra HTML DD và chuyển đổi sang Confluence). Tôi đang tìm một công cụ để quét các bảng Postgres của tôi và xuất ra một Data Dictionary thân thiện với wiki, cho phép bảo trì liên tục khi DB thay đổi, mà không cần cập nhật cơ sở dữ liệu và lược đồ DB trong công cụ khác.Máy phát điện từ điển dữ liệu cho PostgreSQL tới Confluence Wiki

+0

Có vẻ như không có câu trả lời dễ dàng. Nhưng bạn có thể có được kết xuất YAML của cấu trúc DB của bạn với Pyrseas, hoặc đầu ra XML với SchemaSpy. Tất cả phần còn lại là "yaml to wiki" hoặc "xml to wiki" converter ... Không phải là khoa học tên lửa. – filiprem

+1

Thực ra tôi có thể viết trình chuyển đổi yaml-to-wiki này nếu bạn thuê tôi :-) – filiprem

+0

Ý của bạn là gì với định dạng wiki? Bạn có cần một trang với Header1 cho mỗi bảng, Header2 cho mỗi loại không?Hay bạn cần một danh sách các bảng, mỗi bảng trỏ đến một trang chuyên dụng? – vyegorov

Trả lời

1

Trình biên dịch SQL Confluence của Bob Swift cho phép bạn hiển thị dữ liệu bắt nguồn từ truy vấn SQL trong Trang kết hợp .. ví dụ: như một cái bàn .. có lẽ nó đáng để bạn tìm kiếm?

phiên bản Confluence 3.1.x - 4.9.x hiện đang được hỗ trợ ...

Plugin miễn phí và có thể được tải về từ Plugin Trao đổi Atlassian: https://plugins.atlassian.com/plugins/org.swift.confluence.sql

Thông tin thêm về các plugin có thể được tìm thấy ở đây: https://studio.plugins.atlassian.com/wiki/display/SQL/Confluence+SQL+Plugin

0

Tôi nghĩ bạn sẽ phải tự viết kịch bản này, nhưng nó khá dễ dàng và thú vị. Tôi sẽ giả sử Python ở đây.

Tôi thích giao diện XML-RPC hợp lưu. Để làm điều đó, hãy xem http://goo.gl/KCt3z. Các phương pháp từ xa mà bạn quan tâm có khả năng đăng nhập, getPage, setPage và/hoặc updatePage. Bộ xương này sẽ trông giống như:

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 đây là dữ liệu từ bảng PG. Chúng tôi sẽ xây dựng bên dưới.

Để lấy dữ liệu đơn giản từ PostgreSQL, tôi sử dụng psycopg2 thường xuyên nhất (cũng xem xét SQLSoup). Bất kể bạn lấy dữ liệu như thế nào, bạn sẽ kết thúc với một danh sách các hàng làm từ điển. Phần cơ sở dữ liệu có thể trông giống như:

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() 

Bây giờ bạn cần định dạng dữ liệu. Đối với các công cụ đơn giản, print = statements sẽ hoạt động. Để định dạng phức tạp hơn, hãy xem xét một công cụ tạo khuôn mẫu như jinja2 (http://jinja.pocoo.org/). Mã render có thể trông như thế này:

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

File template_path sẽ chứa các mẫu định dạng, mà có thể trông giống như:

<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> 

Lưu ý: Confluence không còn sử dụng đánh dấu wiki theo mặc định. Bạn nên viết HTML.

Cuối cùng, nếu bạn muốn tạo trang cho tất cả các bảng, bạn có thể xem thông tin_schema, chứa thông tin về cơ sở dữ liệu dưới dạng bảng. Ví dụ:

select table_name from information_schema.tables where table_schema = current_schema(); 
Các vấn đề liên quan