如何查看 PostgreSQL 中视图的 CREATE VIEW 代码?

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

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

类似于 MySQL 中的

SHOW CREATE VIEW

postgresql view definition
9个回答
319
投票

不得不返回这里查找

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

\d+ viewname

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

\?
来查看类似的命令。

额外提示:emacs 命令

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


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

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

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


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

24
投票

如果您想要 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 将丢失,您将只能读取视图定义的重写版本。
并非所有视图都会被重写,但如果您使用子选择或联接,您的视图可能会被重写。


8
投票

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

\dv <VIEWNAME>

-5
投票

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

SHOW TABLE your_schema_name.your_table_name
© www.soinside.com 2019 - 2024. All rights reserved.