217

有没有一种简单的方法可以查看用于使用 PostgreSQL 命令行客户端创建视图的代码?

类似于SHOW CREATE VIEW来自 MySQL 的东西。

4

9 回答 9

285

不得不回到这里查找pg_get_viewdef(如何记住!!),所以搜索了一个更令人难忘的命令......并得到了它:

\d+ viewname

\?您可以通过在 pgsql 命令行中键入来查看类似类型的命令。

额外提示:emacs 命令sql-postgres使 pgsql 更加愉快(编辑、复制、粘贴、命令历史记录)。

于 2013-03-14T22:02:54.457 回答
168
select pg_get_viewdef('viewname', true)

手册中提供了所有这些功能的列表:

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

于 2013-01-31T20:36:53.487 回答
68
select definition from pg_views where viewname = 'my_view'
于 2013-01-31T20:29:23.970 回答
21

如果你想要一个 ANSI SQL-92 版本:

select view_definition from information_schema.views where table_name = 'view_name';
于 2016-08-09T15:48:30.453 回答
11

来自 v9.6 及更高版本的好消息。视图编辑现在是 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
于 2017-04-08T04:47:46.213 回答
7

这些是需要指出的一点。
使用函数pg_get_viewdefpg_views或 information_schema.views ,您将始终获得原始 DDL 的重写版本。
重写的版本可能与您的原始 DDL 脚本相同,也可能不同。

如果规则管理器重写您的视图定义,您的原始 DLL 将丢失,您将能够读取视图定义的唯一重写版本。
并非所有视图都被重写,但如果您使用子选择或连接,您的视图可能会被重写。

于 2018-09-27T11:13:15.190 回答
6

psqlcli 中,您可以使用

\d+ <yourViewName>
\sv <yourViewName>

输出如下:

\d+ v_ma_students

                               View "public.v_ma_students"
 Column |         Type          | Collation | Nullable | Default | Storage  | De
scription
--------+-----------------------+-----------+----------+---------+----------+---
SOMETHINGS HERE

View definition:
 SELECT student.sno,
    student.sname,
    student.ssex,
    student.sage,
    student.sdept
   FROM student
  WHERE student.sdept::text = 'MA'::text;
Options: check_option=cascaded


\sv v_ma_students

CREATE OR REPLACE VIEW public.v_ma_students AS
 SELECT student.sno,
    student.sname,
    student.ssex,
    student.sage,
    student.sdept
   FROM student
  WHERE student.sdept::text = 'MA'::text
 WITH CASCADED CHECK OPTION
于 2021-10-31T13:12:17.480 回答
3

在命令行客户端psql 中,您可以使用以下命令:

\sv <VIEWNAME>
于 2021-09-21T12:47:44.557 回答
-1

查找“CREATE TABLE ...”查询的直接方法是使用此查询 -

SHOW TABLE your_schema_name.your_table_name
于 2021-12-17T05:10:26.593 回答