在使用PostgreSQL命令行客户端时,是否有一种简单的方法可以查看用于创建视图的代码?
类似于MySQL中的SHOW 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 pg_get_viewdef('viewname'::regclass, true)
。 - user330315SELECT pg_get_viewdef(to_regclass('视图名称'))
(需要至少v9.4版本)。 - wateryselect definition from pg_views where viewname = 'my_view'
select definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
。 - bonhpg_get_viewdef()
好多了。 - Faustin Gashakamba如果您想要一个 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
命令行界面中,你可以使用
\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_viewdef
、pg_views
或信息模式中的views
,你总会得到一个重写版本,而非原始DDL版本。
重写版本可能与你的原始DDL脚本相同或不同。
如果规则管理器重写了你的视图定义,那么你的原始DLL将会丢失,你只能阅读到被重写后的视图定义。
并非所有的视图都会被重写,但如果你使用子查询或联接操作,你的视图很可能会被重写。
\sv <VIEWNAME>
找到“CREATE TABLE…”查询的直接方法是使用以下查询:
SHOW TABLE your_schema_name.your_table_name
view
的代码(DDL)。我已经测试过了。 - Prashant K Tiwari
\dv
列出所有的视图。 - Nathan Long\d+
改为\s+
,但在我的postgresql版本中无效...他还说“l列出视图,s显示代码”...但是\l
对我来说是列出数据库...有人知道上述内容在新的postgresql中是否有效吗? - EoghanM