显示 PostgreSQL 中视图的 CREATE VIEW 代码?

问题描述 投票:0回答:9

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

类似于 MySQL 中的

SHOW CREATE VIEW

database postgresql view definition sql-view
9个回答
323
投票

不得不返回这里查找

pg_get_viewdef
(如何记住这一点!!),所以搜索了一个更容易记住的命令......并得到了它:

\d+ viewname

您可以通过在 pgsql 命令行中输入

\?
来查看类似的命令。

额外提示:emacs 命令

sql-postgres
使 pgsql 变得更加愉快(编辑、复制、粘贴、命令历史记录)。


221
投票
select pg_get_viewdef('viewname', true)

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

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


83
投票
select definition from pg_views where viewname = 'my_view'

25
投票

如果您想要 ANSI SQL-92 版本:

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

13
投票

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

12
投票

psql
cli 中,您可以使用

\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

10
投票

这些是需要指出的小事。
使用函数

pg_get_viewdef
pg_views
或 information_schema.views 您将始终获得原始 DDL 的重写版本
重写的版本可能与您原来的 DDL 脚本相同,也可能不同。

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


9
投票

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

\dv <VIEWNAME>

0
投票

例如,您创建

my_v
视图,如下所示:

CREATE VIEW my_v AS
  SELECT * FROM person;

然后,您可以使用

pg_get_viewdef()
显示 my_v 视图的代码,如下所示:

postgres=# SELECT pg_get_viewdef('my_v', true);
 pg_get_viewdef
-----------------
  SELECT id,    +
     name       +
    FROM person;
(1 row)

或者,您可以使用

\d+ 
> 显示 my_v 视图的代码,如下所示。 *您必须设置
+
<view-name>
,否则代码不会显示:

postgres=# \d+ my_v
                                    View "public.my_v"
 Column |         Type          | Collation | Nullable | Default | Storage  | Description
--------+-----------------------+-----------+----------+---------+----------+-------------
 id     | integer               |           |          |         | plain    |
 name   | character varying(20) |           |          |         | extended |
View definition:
 SELECT id,
    name
   FROM person;

或者,您可以使用

pg_views
显示my_v视图的代码,如下所示:

postgres=# SELECT definition FROM pg_views WHERE viewname = 'my_v';
   definition
-----------------
  SELECT id,    +
     name       +
    FROM person;
(1 row)

或者,您可以使用

information_schema.views
显示 my_v 视图的代码,如下所示:

postgres=# SELECT view_definition FROM information_schema.views WHERE table_name = 'my_v';
 view_definition
-----------------
  SELECT id,    +
     name       +
    FROM person;
(1 row)
© www.soinside.com 2019 - 2024. All rights reserved.