PostgreSQL'de bir görünüm için CREATE VIEW kodu nasıl görüntülenir?


174

PostgreSQL komut satırı istemcisini kullanarak bir görünüm oluşturmak için kullanılan kodu görmenin kolay bir yolu var mı?

SHOW CREATE VIEWMySQL gibi bir şey .

Yanıtlar:


230

Aramak için buraya dönmek zorunda kaldım pg_get_viewdef(bunu nasıl hatırlayacağım !!), bu yüzden daha unutulmaz bir komut aradı ... ve anladım:

\d+ viewname

\?Pgsql komut satırına yazarak benzer komutları görebilirsiniz .

Bonus ipucu: emacs komutu sql-postgrespgsql'yi çok daha hoş hale getirir (düzenleme, kopyalama, yapıştırma, komut geçmişi).


1
Bu numarayı genellikle \ o komutuyla birleştiririm. Bazı dosyalara \ d + dökümü sonra vim makro kullanarak ben benim ihtiyaç sağlanan sağlanan bu dosyaları değiştirdi.
Brain90

Üzücü olan şey: Bu psql olmadan kullanılamaz. "Saf" SQL-komut-sürümü (hiç pg_get_viewdef başvurmadan), örneğin DBI ile Perl için daha taşınabilir olabilir.
Jinxed

1
Daha kullanışlı olan, görünüm tanımı kodunu \ e komutunun bazı varyasyonları ile, örneğin işlevler için \ ef gibi doğrudan düzenleyebilmektir. Bir \ ev özelliği iyi olurdu. Şimdiye kadar @ Brain90 tarafından önerilen çözüm, görünüm tanımlarını hızlı bir şekilde düzenlemeye bulduğum en yakın çözümdür.
Thalis K.

1
İlgili ipucu: \dvtüm görünümleri listeler
Nathan Long

120
select pg_get_viewdef('viewname', true)

Tüm bu işlevlerin bir listesi kılavuzda bulunmaktadır:

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


serin, hatta güzel yazdırır! :) kılavuz, yine de kullanımdan kaldırıldığını söylüyor ... :( teşekkürler!
Elias Dorneles

8
@elias: sadece bir OID adını kullanarak bir OID kullanan sürümü kullanın:select pg_get_viewdef('viewname'::regclass, true)
a_horse_with_no_name 31:13

2
@elias dökümüne bir alternatif olarak, bu da işe yarar: SELECT pg_get_viewdef(to_regclass('viewname'))(en az v9.4 gerektirir).
sulu

49
select definition from pg_views where viewname = 'my_view'

1
Bunun için teşekkürler .. görünüm tanımına sadece psql istemcisinden ziyade programımdan erişmenizi sağlar.
Dominik Dorn

2
Bu, Amazon Redshift için de çalışmasının ek bir avantajına sahiptir.
Brent

Bu, arama yolunda olmayan şemalardaki görünümler için çalışmaz. Ve farklı şemalarda aynı ada sahip iki görünüm arasında ayrım yapmaz. Şema yazdığımda, CREATE SCHEMA ile oluşturduğunuz ad alanına atıfta bulunuyorum
Michael Dillon

1
@MichaelDillon select tanımı yerine bir select * yapar ve diğer bazı bilgiler de dahil olmak üzere görünümün hangi şemadan geldiğini görebilirsiniz.
Anders Kreinøe

Görünümünüz arama yolunda değilseselect definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
bonh

18

Bir ANSI SQL-92 sürümü istiyorsanız:

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

8

V.9.6 ve üstü GoodNews, Görünüm düzenleme artık psql'den yereldir. Sadece \evkomutu çağır . Görünüm tanımları yapılandırılmış düzenleyicinizde gösterilir.

julian@assange=# \ev {your_view_names}

Bonus. Sorgu arabelleğiyle etkileşimde bulunmak için bazı yararlı komutlar.

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, Sadece onu selamlamak için. ilk günlerde psql'ye çok şey kattı. git.postgresql.org/gitweb/…
Brain90

3

Bunlar işaret etmek için küçük bir şey.
Pg_get_viewdef veya pg_views veya information_schema.views işlevini kullanarak her zaman orijinal DDL'nizin yeniden yazılmış bir sürümünü alırsınız .
Yeniden oluşturulan sürüm orijinal DDL komut dosyanızla aynı olabilir veya olmayabilir.

Kural Yöneticisi görünüm tanımınızı yeniden yazarsa, özgün DLL dosyanız kaybolur ve görünüm tanımınızın yalnızca yeniden yazılan sürümünü okuyabilirsiniz.
Tüm görünümler yeniden yazılmaz, ancak alt seçimi veya birleşimleri kullanırsanız, görünümleriniz yeniden yazılır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.