-- Matheus de Oliveira Bacharelado em Ciências de Computação Laboratório de Computação de Alto Desempenho - LCAD<http://www.lcad.icmc.usp.br/> Instituto de Ciências Matemáticas e de Computação - ICMC<http://www.icmc.usp.br/> Universidade de São Paulo - USP <http://www.sc.usp.br/>
2012/7/18 Matheus de Oliveira <[email protected]> > > > 2012/7/18 Alexsander Rosa <[email protected]> > >> Hoje eu coloco no SVN um "pg_dump" com a estrutura do BD (--schema-only). >> Cada vez que preciso mexer numa procedure tenho que selecionar a procedure >> desejada, copiar e colar em algum editor, acrescentar o "OR REPLACE" depois >> do CREATE e só então começar a fazer alguma coisa. E depois de pronta, a >> procedure só entra no SVN via o "pg_dump" seguinte. > > > Para isso você pode usar o "\ef" do psql, que já faz isso pra você, é só > selecionar o editor (e.g. "export EDITOR=vim") e executar: > > \ef <nome da função> > > >> Eu gostaria que houvesse uma opção no "pg_dump" tipo >> "--procedures-in-separate-files" que gerasse o DUMP sem as procedures; >> estas, por sua vez, seriam gravadas em arquivos individuais chamados >> "nome-da-procedure.sql" já com o "OR REPLACE" adicionado. Existe alguma >> ferramenta que faça isso? >> >> > Não sei se tem algo assim pronto, mas não é difícil fazer se você aliar a > tabela pg_proc e a função pg_get_functiondef. > Exemplo: > > SELECT pg_get_functiondef(oid) FROM pg_proc WHERE proname = '<nome da > função>' > > Veja que o retorno será mais de uma linha se a função estiver > sobrecarregada. > > Fiz um pequeno shell script pra isso. Vai ser útil pra mim também: #!/bin/bash ./psql $@ -A -t -F '|' -c " SELECT quote_ident(n.nspname) || '.' || quote_ident(p.proname) || '.' || ROW_NUMBER() OVER(PARTITION BY n.nspname,p.proname) || '.sql', p.oid FROM pg_proc p JOIN pg_namespace n ON n.oid = p.pronamespace WHERE NOT p.proisagg AND n.nspname NOT LIKE 'pg_%' AND n.nspname <> 'information_schema' ORDER BY n.nspname, p.proname, p.oid; " | while read LN; do ./psql $@ -A -t -c "SELECT pg_get_functiondef(`echo $LN | cut -d '|' -f 2`)" > `echo $LN | cut -d '|' -f 1` done Uso: - salvar o texto acima num arquivo chamado "get_functions.sh" (ou qualquer outro nome). - executar: chmod a+x get_functions.sh - chamar o script da mesma forma como chamaria o psql. Exemplo: /path/to/get_functions.sh -h <host> -p <porta> -U <usuário> <banco> - serão gerados arquivos seguindo o modelo <schema>.<func name>.<id>.sqlno diretório corrente (id é um identificador simples e sequencial, um para cada função sobrecarregada, se não tiver sobrecarga será só 1). Mais fácil que isso impossível...=P Atenciosamente, -- Matheus de Oliveira
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
