有没有一种简单的方法来查看使用PostgreSQL命令行客户端创建视图的代码?
比如MySQL中的SHOW CREATE VIEW。
有没有一种简单的方法来查看使用PostgreSQL命令行客户端创建视图的代码?
比如MySQL中的SHOW CREATE 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
These is a little thing to point out. Using the function pg_get_viewdef or pg_views or information_schema.views you will always get a rewritten version of your original DDL. The rewritten version may or not be the same as your original DDL script. If the Rule Manager rewrite your view definition your original DLL will be lost and you will able to read the only the rewritten version of your view definition. Not all views are rewritten but if you use sub-select or joins probably your views will be rewritten.
在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