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

Reply via email to