Existe uma maneira fácil de ver o código usado para criar uma exibição usando o cliente de linha de comando do PostgreSQL?
Algo como o SHOW CREATE VIEW
do MySQL.
Existe uma maneira fácil de ver o código usado para criar uma exibição usando o cliente de linha de comando do PostgreSQL?
Algo como o SHOW CREATE VIEW
do MySQL.
Respostas:
Continuei tendo que voltar aqui para procurar pg_get_viewdef
(como lembrar disso !!), então procurei por um comando mais memorável ... e consegui:
\d+ viewname
Você pode ver tipos semelhantes de comandos digitando \?
na linha de comando pgsql.
Dica: o comando emacs sql-postgres
torna o pgsql muito mais agradável (editar, copiar, colar, histórico de comandos).
\dv
lista todas as visualizações
select pg_get_viewdef('viewname', true)
Uma lista de todas essas funções está disponível no manual:
http://www.postgresql.org/docs/current/static/functions-info.html
select pg_get_viewdef('viewname'::regclass, true)
SELECT pg_get_viewdef(to_regclass('viewname'))
(requer pelo menos a v9.4).
select definition from pg_views where viewname = 'my_view'
select definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
Se você deseja uma versão ANSI SQL-92:
select view_definition from information_schema.views where table_name = 'view_name';
GoodNews da v.9.6 e superior, a edição de visualização agora é nativa do psql. Apenas invoque o \ev
comando. As definições de exibição serão exibidas no seu editor configurado.
julian@assange=# \ev {your_view_names}
Bônus. Algum comando útil para interagir com o buffer de consulta.
Query Buffer
\e [FILE] [LINE] edit the query buffer (or file) with external editor
\ef [FUNCNAME [LINE]] edit function definition with external editor
\ev [VIEWNAME [LINE]] edit view definition with external editor
\p show the contents of the query buffer
\r reset (clear) the query buffer
\s [FILE] display history or save it to file
\w FILE write query buffer to file
Isso é uma coisinha a salientar.
Usando a função pg_get_viewdef ou pg_views ou information_schema.views, você sempre terá uma versão reescrita do seu DDL original.
A versão rewited pode ou não ser igual ao seu script DDL de origem.
Se o Rule Manager reescrever sua definição de exibição, sua DLL original será perdida e você poderá ler a única versão reescrita de sua definição de exibição.
Nem todas as visualizações são reescritas, mas se você usar a sub-seleção ou a associação, provavelmente suas visualizações serão reescritas.