PostgreSQL에서 뷰의 CREATE VIEW 코드를 보는 방법은 무엇입니까?


173

PostgreSQL 명령 행 클라이언트를 사용하여보기를 작성하는 데 사용 된 코드를 쉽게 볼 수 있습니까?

SHOW CREATE VIEWMySQL 과 같은 것 .

답변:


229

여기를 다시 찾아야해서 pg_get_viewdef(기억하는 방법 !!) 좀 더 기억에 남는 명령을 찾아서 얻었습니다.

\d+ viewname

\?pgsql 명령 줄 에 입력 하면 비슷한 종류의 명령을 볼 수 있습니다 .

보너스 팁 : emacs 명령 sql-postgres은 pgsql을 훨씬 더 즐겁게 만듭니다 (편집, 복사, 붙여 넣기, 명령 기록).


1
나는 보통이 트릭을 \ o 명령과 결합합니다. \ d +를 일부 파일에 덤프 한 다음 vim 매크로를 사용하여 필요에 따라 해당 파일을 수정했습니다.
Brain90

슬픈 것은 : 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


멋지다, 심지어 그것을 예쁘게 인쇄한다! :) 매뉴얼에 따르면 더 이상 사용되지 않습니다 ... :( 감사합니다!
Elias Dorneles

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-client가 아닌 내 프로그램에서 뷰 정의에 액세스 할 수 있습니다.
Dominik Dorn

2
이는 Amazon Redshift에서도 작동한다는 이점이 있습니다.
브렌트 작성 코드

검색 경로에없는 스키마의보기에는 작동하지 않습니다. 그리고 다른 스키마에서 동일한 이름을 가진 두 개의 뷰를 구별하지 않습니다. 내가 스키마를 쓸 때, 나는 당신이 만드는 것이 네임 스페이스를 참조하고 SCHEMA CREATE
마이클 딜론

1
@MichaelDillon은 select 정의 대신 select *를 작성하면 다른 정보를 포함하여 뷰의 스키마를 볼 수 있습니다.
Anders Kreinøe

보기가 검색 경로에 select definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
없으면

18

ANSI SQL-92 버전을 원하는 경우 :

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

8

v.9.6 이상의 GoodNews에서 View 편집은 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.