如何使用 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不会持久化评论。