Come vedere il codice CREATE VIEW per una vista in PostgreSQL?


173

Esiste un modo semplice per visualizzare il codice utilizzato per creare una vista utilizzando il client della riga di comando PostgreSQL?

Qualcosa come il SHOW CREATE VIEWda MySQL.

Risposte:


229

Ho dovuto tornare qui per cercare pg_get_viewdef(come ricordarlo !!), quindi ho cercato un comando più memorabile ... e l'ho ottenuto:

\d+ viewname

Puoi vedere tipi simili di comandi digitando \?sulla riga di comando pgsql.

Suggerimento bonus: il comando emacs sql-postgresrende pgsql molto più piacevole (modifica, copia, incolla, cronologia dei comandi).


1
Di solito combino questo trucco con il comando \ o. Ho scaricato \ d + su alcuni file quindi usando macro vim ho modificato quei file per soddisfare le mie necessità.
Brain90,

La cosa triste è: questo non può essere usato senza psql. La versione "pura" del comando SQL (senza ricorrere affatto a pg_get_viewdef) può, che è più portabile, ad esempio a Perl con DBI.
Jinxed,

1
Ciò che sarebbe più utile è essere in grado di modificare direttamente il codice di definizione della vista con alcune variazioni del comando \ e, come \ ef per le funzioni. Una funzione \ ev sarebbe gradita. Finora la soluzione suggerita da @ Brain90 è la più vicina che ho trovato per modificare rapidamente le definizioni delle viste.
Thalis K.,

1
Suggerimento correlato: \dvelenca tutte le visualizzazioni
Nathan Long,

120
select pg_get_viewdef('viewname', true)

Un elenco di tutte queste funzioni è disponibile nel manuale:

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


bello, lo stampa persino graziosamente! :) il manuale dice che è deprecato, però ... :( grazie!
Elias Dorneles

8
@elias: basta usare la versione che utilizza un OID lanciando il nome in un oid:select pg_get_viewdef('viewname'::regclass, true)
a_horse_with_no_name

2
@elias in alternativa al casting, funziona anche questo: SELECT pg_get_viewdef(to_regclass('viewname'))(richiede almeno v9.4).
acquoso,

49
select definition from pg_views where viewname = 'my_view'

1
grazie per questo .. permette di accedere alla definizione della vista dal mio programma piuttosto che solo dal client psql.
Dominik Dorn,

2
Questo ha l'ulteriore vantaggio di funzionare anche con Amazon Redshift.
Brent scrive il codice il

Questo non funziona per le viste negli schemi che non si trovano sul percorso di ricerca. E non distingue tra due viste con lo stesso nome in schemi diversi. Quando scrivo uno schema, mi riferisco allo spazio dei nomi creato con CREATE SCHEMA
Michael Dillon,

1
@MichaelDillon effettua una selezione * invece di selezionare la definizione e sarai in grado di vedere da quale schema proviene la vista, incluse alcune altre informazioni.
Anders Kreinøe,

Se la tua vista non è sul percorso di ricerca, usaselect definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
bonh

18

Se si desidera una versione ANSI SQL-92:

select view_definition from information_schema.views where table_name = 'view_name';

8

GoodNews dalla v.9.6 e successive, la modifica della vista ora è nativa da psql. Richiama il \evcomando. Le definizioni di visualizzazione verranno visualizzate nell'editor configurato.

julian@assange=# \ev {your_view_names}

Bonus. Alcuni comandi utili per interagire con il buffer delle query.

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

4
Haha, solo per salutarlo. si impegna molto in psql nei primi giorni. git.postgresql.org/gitweb/…
Brain90,

3

Questa è una piccola cosa da sottolineare.
Usando la funzione pg_get_viewdef o pg_views o information_schema.views otterrai sempre una versione riscritta del tuo DDL originale.
La versione riscritta può essere o meno la stessa del tuo script DDL originale.

Se Rule Manager riscrive la definizione della vista, la DLL originale andrà persa e sarai in grado di leggere l'unica versione riscritta della definizione della vista.
Non tutte le visualizzazioni vengono riscritte, ma se si utilizza la selezione secondaria o si unisce probabilmente le visualizzazioni verranno riscritte.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.