Làm cách nào để xem mã CREATE VIEW cho chế độ xem trong PostgreSQL?


173

Có cách nào dễ dàng để xem mã được sử dụng để tạo chế độ xem bằng ứng dụng khách dòng lệnh PostgreSQL không?

Một cái gì đó giống như SHOW CREATE VIEWtừ MySQL.

Câu trả lời:


229

Phải quay lại đây để tìm kiếm pg_get_viewdef(làm thế nào để nhớ điều đó !!), vì vậy đã tìm kiếm một lệnh đáng nhớ hơn ... và nhận được nó:

\d+ viewname

Bạn có thể thấy các loại lệnh tương tự bằng cách gõ \?vào dòng lệnh pssql.

Tiền thưởng: Lệnh emacs sql-postgreslàm cho pssql dễ chịu hơn rất nhiều (chỉnh sửa, sao chép, dán, lịch sử lệnh).


1
Tôi thường kết hợp thủ thuật này với lệnh \ o. Tôi đổ \ d + vào một số tệp sau đó sử dụng vim macro tôi đã sửa đổi các tệp đó để cung cấp cho nhu cầu của mình.
Brain90

Điều đáng buồn là: Điều này không thể được sử dụng mà không có psql. Phiên bản lệnh SQL "thuần túy" (không cần dùng đến pg_get_viewdef), có thể dễ mang theo hơn, ví dụ như Perl với DBI.
Jinxed

1
Điều hữu ích hơn là có thể chỉnh sửa trực tiếp mã định nghĩa chế độ xem với một số biến thể của lệnh \ e, như \ ef cho các hàm. Một tính năng \ ev sẽ tốt đẹp. Cho đến nay, giải pháp được đề xuất bởi @ Brain90 là giải pháp chỉnh sửa chế độ xem nhanh nhất.
Thalis K.

1
Mẹo liên quan: \dvliệt kê tất cả các lượt xem
Nathan Long

120
select pg_get_viewdef('viewname', true)

Một danh sách tất cả các chức năng có sẵn trong hướng dẫn:

http://www.postgresql.org/docs/civerse/static/fifts-info.html


tuyệt, nó thậm chí còn đẹp - in nó! :) hướng dẫn sử dụng nói rằng nó không được chấp nhận, mặc dù ... :( cảm ơn!
Elias Dornele

8
@elias: chỉ sử dụng phiên bản sử dụng OID bằng cách chuyển tên thành oid:select pg_get_viewdef('viewname'::regclass, true)
a_horse_with_no_name

2
@elias như là một thay thế cho việc đúc, điều này cũng hoạt động: SELECT pg_get_viewdef(to_regclass('viewname'))(yêu cầu ít nhất là v9.4).
chảy nước

49
select definition from pg_views where viewname = 'my_view'

1
cảm ơn vì điều này .. nó cho phép truy cập định nghĩa khung nhìn từ chương trình của tôi chứ không chỉ từ máy khách psql.
Dominik Dorn

2
Điều này có thêm lợi ích ở chỗ nó cũng hoạt động cho Amazon Redshift.
Mã Brent viết

Điều này không hoạt động cho các chế độ xem trong các lược đồ không nằm trên đường tìm kiếm. Và nó không phân biệt giữa hai khung nhìn có cùng tên trong các lược đồ khác nhau. Khi tôi viết lược đồ, tôi đang đề cập đến không gian tên mà bạn tạo bằng CREATE SCHema
Michael Dillon

1
@MichaelDillon thực hiện chọn * thay vì chọn định nghĩa và bạn sẽ có thể xem lược đồ xem từ đó, bao gồm một số thông tin khác.
Anders Kreinøe

Nếu chế độ xem của bạn không nằm trên đường tìm kiếm, hãy sử dụngselect definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
bonh

18

Nếu bạn muốn có phiên bản ANSI SQL-92:

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

8

GoodNews từ v.9.6 trở lên, Xem chỉnh sửa hiện có nguồn gốc từ psql. Chỉ cần gọi \evlệnh. Xem định nghĩa sẽ hiển thị trong trình chỉnh sửa cấu hình của bạn.

julian@assange=# \ev {your_view_names}

Tặng kem. Một số lệnh hữu ích để tương tác với bộ đệm truy vấn.

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, chỉ để chào anh. anh ấy cam kết rất nhiều với psql trong những ngày đầu. git.postgresql.org/gitweb/ từ
Brain90

3

Đây là một điều nhỏ để chỉ ra.
Sử dụng hàm pg_get_viewdef hoặc pg_view hoặc information_schema.view, bạn sẽ luôn nhận được phiên bản viết lại của DDL ban đầu của mình.
Phiên bản được viết lại có thể giống hoặc không giống với tập lệnh DDL gốc của bạn.

Nếu Trình quản lý quy tắc viết lại định nghĩa chế độ xem của bạn, DLL gốc của bạn sẽ bị mất và bạn chỉ có thể đọc phiên bản viết lại của định nghĩa chế độ xem của mình.
Không phải tất cả các chế độ xem được viết lại nhưng nếu bạn sử dụng chọn phụ hoặc tham gia có thể các chế độ xem của bạn sẽ được viết lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.