{"id":619,"date":"2015-03-17T18:00:00","date_gmt":"2015-03-17T18:00:00","guid":{"rendered":"https:\/\/geoadmin.com.br\/?p=619"},"modified":"2021-06-09T10:25:23","modified_gmt":"2021-06-09T13:25:23","slug":"docgen","status":"publish","type":"post","link":"https:\/\/geoadmin.com.br\/?p=619","title":{"rendered":"Docgen"},"content":{"rendered":"<p>Ol\u00e1 pessoal, boa tarde!<\/p>\n<p>Estamos prestando uma consultoria \u00e0 um \u00f3rg\u00e3o governamental que possui um banco de dados em PostgreSQL bastante extenso. Uma de nossas tarefas era documentar o banco de dados todo, incluindo a cria\u00e7\u00e3o de um dicion\u00e1rio de dados compreensivo, com informa\u00e7\u00f5es sobre as tabelas, views, procedures, etc.<\/p>\n<p>Como o banco \u00e9 <strong>grande<\/strong>, possuindo muitos objetos, decidimos criar uma solu\u00e7\u00e3o simples em <em>Python<\/em> que conecta-se ao banco de dados e utilizando um template, escreve o dicion\u00e1rio para n\u00f3s, baseados nos coment\u00e1rios existentes para cada objeto.<\/p>\n<p>No PostgreSQL, acredito que quase todos os objetos do banco possuem um campo de coment\u00e1rio, ou seja, ao inv\u00e9s da documenta\u00e7\u00e3o ficar somente no papel, ela fica diretamente armazenada no campo de coment\u00e1rio de cada objeto, podendo ser consultada por quem j\u00e1 tem permiss\u00e3o aquele determinado objeto. \u00c9 uma ideia simples, mas funcional.<\/p>\n<p>Para inserir os coment\u00e1rios em lote, geramos um arquivo .yaml estruturado, onde as descri\u00e7\u00f5es podem ser preenchidas e posteriormente sincronizadas com o banco de dados. Outro utilit\u00e1rio, gera a documenta\u00e7\u00e3o no formato de um template, podendo o mesmo ser customizado.<\/p>\n<p>Ainda precisa de algumas mudan\u00e7as e cria\u00e7\u00e3o de testes para ficar um pouco mais modular, mas basicamente conseguimos ler todo o cat\u00e1logo do PostgreSQL e gerar esta documenta\u00e7\u00e3o em pouqu\u00edssimo tempo.<\/p>\n<p>Outras funcionalidades veem a mente:<\/p>\n<ul>\n<li>Gera\u00e7\u00e3o de diagramas de forma automatizada;<\/li>\n<li>Gera\u00e7\u00e3o de relat\u00f3rios de problemas comuns de banco de dados (ex: chave \u00fanica em que \u00e9 permitido valor nulo, etc);<\/li>\n<li>Refatora\u00e7\u00e3o do c\u00f3digo para funcionar com outros bancos de dados;<\/li>\n<\/ul>\n<p>O <a href=\"https:\/\/github.com\/sigma-geosistemas\/docgen\" title=\"docgen\">docgen<\/a> foi um projeto interessante de ser feito. Todo escrito em Python e agilizou bastante nossa vida. Fiquem a vontade para conhec\u00ea-lo no Github.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 pessoal, boa tarde! Estamos prestando uma consultoria \u00e0 um \u00f3rg\u00e3o governamental que possui um banco de dados em PostgreSQL bastante extenso. Uma de nossas tarefas era documentar o banco de dados todo, incluindo a cria\u00e7\u00e3o de um dicion\u00e1rio de dados compreensivo, com informa\u00e7\u00f5es sobre as tabelas, views, procedures, etc. Como o banco \u00e9 grande, &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/geoadmin.com.br\/?p=619\" class=\"more-link\">Leia mais<span class=\"screen-reader-text\"> &#8220;Docgen&#8221;<\/span><\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[30,29,44,31,45],"class_list":["post-619","post","type-post","status-publish","format-standard","hentry","category-sem-categoria","tag-desenvolvimento-de-sistemas","tag-dev","tag-docgen","tag-opensource","tag-python"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/geoadmin.com.br\/index.php?rest_route=\/wp\/v2\/posts\/619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geoadmin.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geoadmin.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geoadmin.com.br\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/geoadmin.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=619"}],"version-history":[{"count":1,"href":"https:\/\/geoadmin.com.br\/index.php?rest_route=\/wp\/v2\/posts\/619\/revisions"}],"predecessor-version":[{"id":1333,"href":"https:\/\/geoadmin.com.br\/index.php?rest_route=\/wp\/v2\/posts\/619\/revisions\/1333"}],"wp:attachment":[{"href":"https:\/\/geoadmin.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geoadmin.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geoadmin.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}