On 2015-04-29 11:10, Eloi wrote:
O que pretendo é o que o Euler mostrou com:
psql -c "\d mytable" -o /tmp/foo.sql -P format=latex meubd
Mas para varias tabelas que estão num determinado schema:
SELECT relname FROM pg_class c
INNER JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE relkind = 'r'
AND nspname = 'myschema'
ORDER BY relname; -- 46 tabelas
E que o código que gere a descrição das tabelas fique e se execute
dentro do próprio documento de latex. E que este uma vez compilado
mostre apenas descrição das varias tabelas (\d mytable) presentes no
schema 'myschema'. Não sei se isso é possível.
Já encontrei a uma maneira para resolver o meu problema.
A solução passou por usar código Python dentro de latex.
Deixo aqui o resultado:
\documentclass{article}
\usepackage{python}
\begin{document}
\begin{python}%
import psycopg2
from subprocess import Popen, PIPE, STDOUT
def get_tables(schema):
'''Get tables from a certain schema'''
table_name_list = []
sql = '''
SELECT relname FROM pg_class c
INNER JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE relkind = 'r'
AND nspname = '%s'
ORDER BY relname; ''' % schema
cur.execute(sql)
lines = cur.fetchall()
for line in lines:
table_name_list.append(line[0])
return table_name_list
def get_tables_description(schema, table_name_list, dbname):
'''Get tables description'''
tables_descrition = ''
for table_name in table_name_list:
cmd = 'psql -c "\d %s.%s" -P format=latex %s' % (schema,
table_name, dbname)
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE,
stderr=STDOUT, close_fds=True)
output = p.stdout.read()
tables_descrition = tables_descrition + output
return tables_descrition
# variables
host = 'myhost'
dbname = 'mydb'
user = 'user'
password = 'xxxx'
schema = 'myschema'
# open connection to PostgreSQL
conn = psycopg2.connect("host='%s' dbname='%s' user='%s' password='%s'"
% (host, dbname, user, password));
cur = conn.cursor()
# execute functions
table_name_list = get_tables(schema)
tables_descrition = get_tables_description(schema, table_name_list,
dbname)
print tables_descrition
# close connection to PostgreSQL
conn.close()
\end{python}%
\end{document}
Obrigado pelas dicas, foram fundamentais para chegar a esta solução.
Cumprimentos,
Eloi Ribeiro
Geoinformatic
51.9871, 5.6661
http://eloiribeiro.eu
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral