有没有一种简单的方法可以查看使用 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_viewdef
或 pg_views
或 information_schema.views 您将始终获得原始 DDL 的重写版本。在命令行客户端psql您可以使用以下命令:
\dv <VIEWNAME>
例如,您创建
my_v
视图,如下所示:
CREATE VIEW my_v AS
SELECT * FROM person;
然后,您可以使用
pg_get_viewdef()显示
my_v
视图的代码,如下所示:
postgres=# SELECT pg_get_viewdef('my_v', true);
pg_get_viewdef
-----------------
SELECT id, +
name +
FROM person;
(1 row)
或者,您可以使用
\d+> 显示
my_v
+
和<view-name>
,否则代码不会显示:
postgres=# \d+ my_v
View "public.my_v"
Column | Type | Collation | Nullable | Default | Storage | Description
--------+-----------------------+-----------+----------+---------+----------+-------------
id | integer | | | | plain |
name | character varying(20) | | | | extended |
View definition:
SELECT id,
name
FROM person;
或者,您可以使用
pg_views显示
my_v
视图的代码,如下所示:
postgres=# SELECT definition FROM pg_views WHERE viewname = 'my_v';
definition
-----------------
SELECT id, +
name +
FROM person;
(1 row)
或者,您可以使用
information_schema.views显示
my_v
视图的代码,如下所示:
postgres=# SELECT view_definition FROM information_schema.views WHERE table_name = 'my_v';
view_definition
-----------------
SELECT id, +
name +
FROM person;
(1 row)