¿Cómo ver el código CREATE VIEW para una vista en PostgreSQL?

173

¿Hay una manera fácil de ver el código utilizado para crear una vista usando el cliente de línea de comandos PostgreSQL?

Algo como el SHOW CREATE VIEWde MySQL.

Elias Dorneles
fuente

Respuestas:

229

Seguí teniendo que regresar aquí para buscar pg_get_viewdef(¡cómo recordarlo!), Así que busqué un comando más memorable ... y lo obtuve:

\d+ viewname

Puede ver tipos similares de comandos escribiendo \?en la línea de comando pgsql.

sql-postgresConsejo adicional : el comando emacs hace que pgsql sea mucho más agradable (editar, copiar, pegar, historial de comandos).

EoghanM
fuente
1
Usualmente combino este truco con \ o comando. Volcado \ d + en algunos archivos y luego usando vim macro modifiqué esos archivos para satisfacer mis necesidades.
Brain90
Lo triste es: esto no se puede usar sin psql. La versión de comando SQL "pura" (sin recurrir a pg_get_viewdef) puede, que es más portátil, por ejemplo, a Perl con DBI.
Jinxed
1
Lo que sería más útil es poder editar el código de definición de vista directamente con alguna variación del comando \ e, como \ ef para funciones. Una característica de \ ev sería buena. Hasta ahora, la solución sugerida por @ Brain90 es la más cercana que he encontrado a las definiciones de vista de edición rápida.
Thalis K.
1
\dv
Nathan Long
120
select pg_get_viewdef('viewname', true)

Una lista de todas esas funciones está disponible en el manual:

http://www.postgresql.org/docs/current/static/functions-info.html

un caballo sin nombre
fuente
genial, ¡incluso lo imprime bonito! :) el manual dice que está en desuso, aunque ... :( ¡gracias!
Elias Dorneles
8
@elias: solo use la versión que usa un OID al select pg_get_viewdef('viewname'::regclass, true)
convertir
2
@elias como alternativa al casting, esto también funciona: SELECT pg_get_viewdef(to_regclass('viewname'))(requiere al menos v9.4).
acuoso
49
select definition from pg_views where viewname = 'my_view'
Clodoaldo Neto
fuente
1
gracias por este ... permite acceder a la definición de vista desde mi programa en lugar de solo desde el cliente psql.
Dominik Dorn
2
Esto tiene el beneficio adicional de que también funciona para Amazon Redshift.
Brent escribe el código el
Esto no funciona para vistas en esquemas que no están en la ruta de búsqueda. Y no distingue entre dos vistas con el mismo nombre en diferentes esquemas. Cuando escribo un esquema, me refiero al espacio de nombres que creas con CREATE SCHEMA
Michael Dillon el
1
@MichaelDillon realiza una selección * en lugar de seleccionar definición, y podrás ver de qué esquema proviene la vista, incluida alguna otra información.
Anders Kreinøe
Si su vista no está en la ruta de búsqueda, useselect definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
bonh
18

Si desea una versión ANSI SQL-92:

select view_definition from information_schema.views where table_name = 'view_name';
Steve Judd
fuente
8

GoodNews de v.9.6 y superior, la edición de vistas ahora es nativa de psql. Solo invoque el \evcomando. Ver definiciones se mostrará en su editor configurado.

julian@assange=# \ev {your_view_names}

Prima. Algún comando útil para interactuar con el búfer de consultas.

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
Brain90
fuente
44
Jaja, solo para saludarlo. se comprometió mucho con psql en los primeros días. git.postgresql.org/gitweb/…
Brain90
3

Esto es algo pequeño para señalar.
Usando la función pg_get_viewdef o pg_views o information_schema.views siempre obtendrá una versión reescrita de su DDL original.
La versión reescrita puede ser o no la misma que su script DDL original.

Si el Administrador de reglas reescribe su definición de vista, su DLL original se perderá y podrá leer la única versión reescrita de su definición de vista.
No todas las vistas se reescriben, pero si usa una selección secundaria o se une, probablemente sus vistas se reescribirán.

Gianluca Rossini
fuente