PostgreSQLのビューのCREATE VIEWコードを確認するにはどうすればよいですか?


173

PostgreSQLコマンドラインクライアントを使用してビューを作成するために使用されるコードを確認する簡単な方法はありますか?

SHOW CREATE VIEWMySQLのようなもの。

回答:


229

検索するためにここに戻る必要があったpg_get_viewdef(それを覚える方法!!)ので、より記憶に残るコマンドを検索し、それを取得しました。

\d+ viewname

\?pgsqlコマンドラインで入力すると、同様のコマンドを表示できます。

おまけのヒント:emacsコマンドを使用sql-postgresすると、pgsqlがより快適になります(編集、コピー、貼り付け、コマンド履歴)。


1
私は通常、このトリックを\ oコマンドと組み合わせます。\ d +をいくつかのファイルにダンプしてから、vimマクロを使用して、必要に応じてそれらのファイルを変更しました。
Brain90、15年

悲しいことに、これはpsqlなしでは使用できません。「純粋な」SQLコマンドバージョン(pg_get_viewdefをまったく使用しない)は、たとえば、DBIを使用するPerlに移植性の高いものにすることができます。
Jinxed

1
さらに便利なのは、関数の\ efなど、\ eコマンドのバリエーションを使用してビュー定義コードを直接編集できることです。\ ev機能がいいでしょう。これまでのところ、@ Brain90によって提案されたソリューションは、ビュー定義をすばやく編集するために私が見つけた最も近いソリューションです。
Thalis K.

1
関連ヒント:\dvすべてのビューのリスト
Nathan Long

120
select pg_get_viewdef('viewname', true)

これらすべての関数のリストはマニュアルにあります:

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


かっこいい、それもきれいに印刷します!:)マニュアルには、それが非推奨であると書かれていますが... :(ありがとう!
エリアス・ドルネレス2013年

8
@elias:ちょうどOIDに名前をキャストすることによって、OIDを使用するバージョンを使用:select pg_get_viewdef('viewname'::regclass, true)
a_horse_with_no_name

2
キャストの代わりに@eliasを使用すると、これも機能しますSELECT pg_get_viewdef(to_regclass('viewname'))(少なくともv9.4が必要)。
水が多い

49
select definition from pg_views where viewname = 'my_view'

1
これをありがとう..これは、psqlクライアントからだけでなく、私のプログラムからビュー定義にアクセスできるようにします。
ドミニクドーン2014

2
これには、Amazon Redshiftでも機能するという追加の利点があります。
ブレントがコードを

これは、検索パス上にないスキーマのビューでは機能しません。また、異なるスキーマにある同じ名前の2つのビューを区別しません。スキーマを書くとき、私はCREATE SCHEMAで作成した名前空間を参照しています
Michael Dillon

1
@MichaelDillonは、select定義の代わりにselect *を作成します。他の情報を含め、ビューのスキーマを確認できます。
AndersKreinøe2017年

ビューが検索パスにない場合は、select definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
bonh


8

v.9.6以降のGoodNews、ビューの編集がpsqlからネイティブになりました。\evコマンドを呼び出すだけです。ビュー定義は、構成されたエディターに表示されます。

julian@assange=# \ev {your_view_names}

ボーナス。クエリバッファを操作するための便利なコマンド。

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
ははは、敬礼するためだけに。初期の頃、彼はpsqlに多くのことをコミットしました。git.postgresql.org/gitweb/...
Brain90

3

これらは指摘すべき小さなことです。
関数pg_get_viewdef、pg_views、またはinformation_schema.views を使用すると、常に元のDDLの書き換えられたバージョン取得できます。
書き直されたバージョンは、元のDDLスクリプトと同じである場合と同じでない場合があります。

ルールマネージャがビュー定義を書き換えると、元のDLLは失われ、書き換えられたバージョンのビュー定義のみを読み取ることができます。
すべてのビューが書き換えられるわけではありませんが、副選択または結合を使用すると、ビューが書き換えられる可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.