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



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

类似于MySQL的SHOW CREATE VIEW

一直不得不回到这里查找pg_get_viewdef(如何记住这一点!!并得到了它:

d+ viewname

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

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

select pg_get_viewdef('viewname', true)

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

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

select definition from pg_views where viewname = 'my_view'

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

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

来自 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

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

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

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

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

sv <VIEWNAME>

查找"创建表..."的简单方法查询是使用此查询 -

SHOW TABLE your_schema_name.your_table_name

相关内容

最新更新