pgsql:添加注释与查询注释

本文介绍了如何在PostgreSQL数据库中添加和查询对象的注释,包括为数据库对象如表、列添加注释以及执行查询来获取这些注释信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.添加注释

--语法
comment on [type] [target] is [comment]  
--为表添加注释
comment on table user is 'The user table';
--为字段注释
comment on column user.userid is 'The user ID';

2.查询注释

--查询字段注释,objsubid为表中字段的序号,从左侧从1开始
select description from pg_description
join pg_class on pg
<think>好的,用户需要导出PostgreSQL数据库中表的注释。我需要先回忆一下PostgreSQL中如何存储注释。记得PostgreSQL使用系统表来存储元数据,注释可能保存在`pg_description`或者相关的视图中。比如,`pg_class`可能关联了表的描述信息。 用户提到的引用[2]里有一个SQL查询:`select relname as tabname,cast(obj_description(relfilenode,'pg_class') as varchar) as comment from pg_class c`。这说明可以使用`obj_description`函数来获取表的注释,该函数需要表的`relfilenode`和'pg_class'作为参数。这个方法可能有效,但可能需要过滤出用户表,排除系统表。 另外,系统视图`information_schema.columns`可能也包含注释,但可能需要结合`pg_catalog`中的表来获取更全面的信息。比如,`COMMENT`语句用于添加注释,而查询时可能需要联合多个系统表。 接下来,用户可能需要分步的方法,比如使用psql命令行工具或者编写SQL查询。导出注释可能需要生成包含表名和注释的列表,可以考虑使用`pg_dump`加上特定选项,但不确定是否支持只导出注释。可能需要使用SQL查询来提取注释,然后将结果导出到文件。 另外,用户可能需要知道如何批量导出所有表的注释,或者针对特定表的注释。可能需要编写一个查询,遍历所有用户表,然后获取它们的注释。需要确保查询过滤掉系统表,比如通过模式名`public`或者检查表的所属模式。 可能还需要考虑视图、索引等其他对象的注释,但用户的问题明确提到表注释,所以应专注于表级别。需要验证提供的SQL是否正确,比如是否`obj_description`的参数正确,以及是否需要关联其他表如`pg_namespace`来限定模式。 最后,用户可能需要将查询结果导出到CSV或其他格式,可以使用`\copy`命令在psql中实现,或者使用客户端工具导出结果。需要确保步骤清晰,适用于不同版本的PostgreSQL,特别是用户可能使用的版本是否支持相关函数或视图。 总结步骤应该是:连接到数据库,编写正确的SQL查询来获取表名和注释,过滤用户所需的表,然后导出结果。需要测试提供的SQL是否有效,并考虑可能的错误情况,比如没有注释时的处理。</think>### 如何导出 PostgreSQL 表注释 #### 方法一:通过系统视图查询 1. **使用`obj_description`函数** 通过系统函数`obj_description`直接查询表的注释: ```sql SELECT relname AS tabname, CAST(obj_description(relfilenode, 'pg_class') AS VARCHAR) AS comment FROM pg_class c WHERE relkind = 'r' -- 仅筛选普通表 AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public'); -- 指定模式(如public) ``` 此方法通过`pg_class`系统表获取表名,并关联`pg_namespace`过滤指定模式的表[^2]。 2. **结合`pg_description`系统表** 通过`pg_description``pg_class`联合查询: ```sql SELECT c.relname AS tabname, d.description AS comment FROM pg_class c LEFT JOIN pg_description d ON c.oid = d.objoid WHERE c.relkind = 'r' AND d.objsubid = 0; -- objsubid=0表示表级注释 ``` --- #### 方法二:通过`information_schema`查询 ```sql SELECT table_name, obj_description(table_name::regclass) AS comment FROM information_schema.tables WHERE table_schema = 'public'; -- 限定模式 ``` 此方法适用于需要兼容标准SQL语法的场景。 --- #### 方法三:导出为文件 1. **使用`psql`命令行导出** 将查询结果保存为CSV文件: ```bash psql -U 用户名 -d 数据库名 -c "COPY (SELECT relname, obj_description(relfilenode, 'pg_class') FROM pg_class WHERE relkind = 'r') TO STDOUT WITH CSV HEADER" > table_comments.csv ``` 2. **通过图形化工具导出** 在pgAdmin或DBeaver等工具中执行上述SQL,直接导出查询结果为Excel或CSV。 --- #### 注意事项 - **权限问题**:需确保用户对`pg_class`和`pg_description`有查询权限。 - **空注释处理**:若表无注释查询结果会显示`NULL`,可通过`COALESCE(comment, '')`替换为空字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值