Bagaimana cara melihat kode CREATE VIEW untuk tampilan di PostgreSQL?

173

Apakah ada cara mudah untuk melihat kode yang digunakan untuk membuat tampilan menggunakan klien baris perintah PostgreSQL?

Sesuatu seperti SHOW CREATE VIEWdari MySQL.

Elias Dorneles
sumber

Jawaban:

229

Terus harus kembali ke sini untuk mencari pg_get_viewdef(bagaimana mengingat itu !!), jadi mencari perintah yang lebih mudah diingat ... dan mendapatkannya:

\d+ viewname

Anda dapat melihat jenis-jenis perintah serupa dengan mengetikkan \?pada baris perintah pgsql.

Kiat bonus: Perintah emacs sql-postgresmembuat pgsql jauh lebih menyenangkan (edit, salin, tempel, riwayat perintah).

Eoghan
sumber
1
Saya biasanya menggabungkan trik ini dengan perintah \ o. Saya membuang \ d + ke beberapa file kemudian menggunakan vim macro saya memodifikasi file-file itu untuk memenuhi kebutuhan saya.
Brain90
Yang menyedihkan adalah: Ini tidak dapat digunakan tanpa psql. SQL-command-version "murni" (tanpa menggunakan pg_get_viewdef sama sekali) dapat, yang lebih portabel, misalnya untuk Perl dengan DBI.
Jinxed
1
Apa yang akan lebih bermanfaat adalah dapat mengedit kode definisi tampilan secara langsung dengan beberapa variasi dari perintah \ e, seperti \ ef untuk fungsi. Fitur yang bagus. Sejauh ini solusi yang disarankan oleh @ Brain90 adalah yang paling dekat yang saya temukan untuk mengedit definisi tampilan dengan cepat.
Thalis K.
1
Kiat terkait: \dvdaftar semua tampilan
Nathan Long
120
select pg_get_viewdef('viewname', true)

Daftar semua fungsi tersebut tersedia di manual:

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

seekor kuda tanpa nama
sumber
keren, bahkan cukup mencetaknya! :) manual mengatakan sudah usang, meskipun ... :( terima kasih!
Elias Dorneles
8
@elias: cukup gunakan versi yang menggunakan OID dengan melemparkan nama ke oid:select pg_get_viewdef('viewname'::regclass, true)
a_horse_with_no_name
2
@elias sebagai alternatif untuk casting, ini juga berfungsi: SELECT pg_get_viewdef(to_regclass('viewname'))(membutuhkan setidaknya v9.4)
berair
49
select definition from pg_views where viewname = 'my_view'
Clodoaldo Neto
sumber
1
terima kasih untuk yang satu ini .. memungkinkan untuk mengakses definisi tampilan dari program saya dan bukan hanya dari psql-client.
Dominik Dorn
2
Ini memiliki manfaat tambahan karena berfungsi untuk Amazon Redshift juga.
Brent Menulis Kode
Ini tidak berfungsi untuk tampilan di skema yang tidak ada di jalur pencarian. Dan itu tidak membedakan antara dua tampilan dengan nama yang sama di skema yang berbeda. Ketika saya menulis skema, saya merujuk ke namespace yang Anda buat dengan CREATE SCHEMA
Michael Dillon
1
@MichaelDillon membuat pilih * alih-alih memilih definisi, dan Anda akan dapat melihat skema apa dari pandangan, termasuk beberapa informasi lainnya.
Anders Kreinøe
Jika tampilan Anda tidak berada di jalur pencarian, gunakanselect definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
bonh
18

Jika Anda menginginkan versi ANSI SQL-92:

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

GoodNews dari v.9.6 dan lebih tinggi, Lihat editing sekarang asli dari psql. Hanya memohon \evperintah. Lihat definisi akan ditampilkan di editor Anda yang dikonfigurasi.

julian@assange=# \ev {your_view_names}

Bonus. Beberapa perintah yang berguna untuk berinteraksi dengan buffer permintaan.

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
sumber
4
Haha, Hanya untuk memberi hormat padanya. dia banyak berkomitmen untuk psql di awal-awal. git.postgresql.org/gitweb/…
Brain90
3

Ini adalah hal kecil untuk ditunjukkan.
Dengan menggunakan fungsi pg_get_viewdef atau pg_views atau information_schema.views, Anda akan selalu mendapatkan versi penulisan ulang dari DDL asli Anda.
Versi yang ditulis ulang mungkin atau tidak sama dengan skrip DDL asal Anda.

Jika Manajer Aturan menulis ulang definisi tampilan Anda, DLL asli Anda akan hilang dan Anda hanya dapat membaca versi definisi tampilan Anda yang ditulis ulang.
Tidak semua tampilan ditulis ulang tetapi jika Anda menggunakan sub-pilih atau bergabung mungkin tampilan Anda akan ditulis ulang.

Gianluca Rossini
sumber