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

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

类似于MySQL中的SHOW CREATE VIEW

170506 次浏览
select definition from pg_views where viewname = 'my_view'
select pg_get_viewdef('viewname', true)

手册中列出了所有这些功能:

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

一直不得不返回这里查找pg_get_viewdef(如何记住它!!),所以寻找一个更容易记住的命令…并得到了它:

\d+ viewname

通过在pgsql命令行中键入\?,可以看到类似的命令。

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

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

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

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

这是需要指出的一点 使用函数pg_get_viewdefpg_views或information_schema。查看原始DDL的你总是会得到一个重写的版本 重写的版本可能与您原来的DDL脚本相同,也可能不相同 如果规则管理器重写了你的视图定义,你的原始DLL将会丢失,你只能读取视图定义的重写版本 不是所有的视图都会被重写,但是如果你使用了sub-select或join,你的视图可能会被重写

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

\sv <VIEWNAME>

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

找到'CREATE TABLE…的查询是使用这个查询-

SHOW TABLE your_schema_name.your_table_name