如何使用 PostgreSQL 在视图定义中保留注释?
How to keep comments inside a view definition with PostgreSQL?
当我从复杂查询创建视图时,我需要保留在 SQL 查询中添加的注释,以便更轻松地返回视图定义。在 pgAdminIII 中,当我创建一个视图然后查阅视图定义时,注释被删除并且缩进被完全修改...有没有办法改变这种行为?
视图创建:
CREATE OR REPLACE VIEW public.v_test AS
-- Count number of null lines within table 'test'
(SELECT * FROM public.test WHERE client IS NULL);
创建后查看定义,如pgAdminIII中所示:
-- View: v_test
-- DROP VIEW v_test;
CREATE OR REPLACE VIEW v_test AS
SELECT test.gid,
test.client
FROM test
WHERE test.client IS NULL;
ALTER TABLE v_test
OWNER TO postgres;
感谢帮助!
不,Postgres 将视图保存为解析树,因此它不会记住空格或注释。
不过,如果你确实需要它,functions
可以记住评论。
Postgres 不会按原样存储视图定义,因此您不能以这种方式存储注释。使用comment
命令:
create view my_view as select 1;
comment on view my_view is 'It is my view';
select obj_description('my_view'::regclass);
obj_description
-----------------
It is my view
(1 row)
可以在PgAdmin3中看到评论:
-- View: public.my_view
-- DROP VIEW public.my_view;
CREATE OR REPLACE VIEW public.my_view AS
SELECT 1;
ALTER TABLE public.my_view
OWNER TO postgres;
COMMENT ON VIEW public.my_view
IS 'it is my view';
另一种选择是创建后期绑定视图。为此,请在创建视图时使用 WITH NO SCHEMA BINDING
。这可能会对您的环境产生影响,因此请在此处查看 NO SCHEMA BINDING:CREATE VIEW DOCS
示例 1:
CREATE VIEW test_1 AS
--selects the number 1
SELECT 1;
示例 2:
CREATE VIEW test_2 AS
--selects the number 2
SELECT 2
WITH NO SCHEMA BINDING;
由于延迟绑定等原因,示例 2 的注释将在查看视图定义时保留。示例1不会持久化评论。
当我从复杂查询创建视图时,我需要保留在 SQL 查询中添加的注释,以便更轻松地返回视图定义。在 pgAdminIII 中,当我创建一个视图然后查阅视图定义时,注释被删除并且缩进被完全修改...有没有办法改变这种行为?
视图创建:
CREATE OR REPLACE VIEW public.v_test AS
-- Count number of null lines within table 'test'
(SELECT * FROM public.test WHERE client IS NULL);
创建后查看定义,如pgAdminIII中所示:
-- View: v_test
-- DROP VIEW v_test;
CREATE OR REPLACE VIEW v_test AS
SELECT test.gid,
test.client
FROM test
WHERE test.client IS NULL;
ALTER TABLE v_test
OWNER TO postgres;
感谢帮助!
不,Postgres 将视图保存为解析树,因此它不会记住空格或注释。
不过,如果你确实需要它,functions
可以记住评论。
Postgres 不会按原样存储视图定义,因此您不能以这种方式存储注释。使用comment
命令:
create view my_view as select 1;
comment on view my_view is 'It is my view';
select obj_description('my_view'::regclass);
obj_description
-----------------
It is my view
(1 row)
可以在PgAdmin3中看到评论:
-- View: public.my_view
-- DROP VIEW public.my_view;
CREATE OR REPLACE VIEW public.my_view AS
SELECT 1;
ALTER TABLE public.my_view
OWNER TO postgres;
COMMENT ON VIEW public.my_view
IS 'it is my view';
另一种选择是创建后期绑定视图。为此,请在创建视图时使用 WITH NO SCHEMA BINDING
。这可能会对您的环境产生影响,因此请在此处查看 NO SCHEMA BINDING:CREATE VIEW DOCS
示例 1:
CREATE VIEW test_1 AS
--selects the number 1
SELECT 1;
示例 2:
CREATE VIEW test_2 AS
--selects the number 2
SELECT 2
WITH NO SCHEMA BINDING;
由于延迟绑定等原因,示例 2 的注释将在查看视图定义时保留。示例1不会持久化评论。