如何使用 PostgreSQL 在视图定义中保留注释?

问题描述 投票:0回答:4

当我从复杂查询创建视图时,我需要保留在 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;

感谢您的帮助!

postgresql comments indentation pgadmin
4个回答
10
投票

不,Postgres 将视图保存为解析树,因此它不记住空格或注释。

但是,如果你真的需要它,

functions
可以记住评论。


7
投票

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';



0
投票

WHERE 'Here it filters some columns on conditions' NOTNULL AND ...

对于 SELECT 中的计算,可以将其变为 1:

SELECT ('Here it calculates some column' NOTNULL)::integer * ...

所以我们最终会得到这样的结果:

SELECT ('Finding average column1 among column2' notnull)::integer * SUM(column1)/count(distinct column2) FROM table WHERE 'Only records with dates in column3 older than 1 year' NOTNULL AND column3 < now() - interval '1 year'

我不是一名熟练的数据库工程师,所以也许我目前看不到可能的影响。虽然很简单而且总比没有好,但我在互联网上没有找到任何类似的解决方案,所以我预计这个想法不会那么聪明和容易)

有什么想法吗?我将不胜感激)


-1
投票
WITH 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 不会保留注释。

© www.soinside.com 2019 - 2024. All rights reserved.