PostgreSQL 清理表字段的备注脚本

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: PostgreSQL 清理表字段的备注脚本

Oracle

Oracle 数据库中可以 通过user_col_comments 这个表来实现删除注释。

select 'comment on column '||t.table_name||'.'||t.column_name||' is '''';' from user_col_comments t;

PostgreSQL

但在PostgreSQL中没有一个类似的表 但是我们也可以通过语句来实现这个功能。

postgresql 数据库 有 pg_class 和 pg_namespace 表。

pg_class 记录表和几乎所有具有列或者像表的东西。 这包括索引(但还要参 见 pg_index )、序列 ( pg_sequence

)、视图、物化视图、组合类型和 TOAST 表,参 见 relkind 。

pg_namespace 存储名字空间。名字空间是 SQL 模式之下的结构:每个名字空间拥有一个

独立的表、类型等的集合,且其中没有名字冲突。

-- 创建表备注视图
CREATE 
        OR REPLACE VIEW table_comment AS SELECT
        n.nspname,
        relname AS tabname,
        obj_description ( relfilenode, 'pg_class' ) AS COMMENT,
        concat_ws ( '', 'COMMENT ON TABLE ', relname, ' is ''''' ) 
FROM
        pg_class
        C LEFT JOIN pg_catalog.pg_namespace n ON n.oid = C.relnamespace 
WHERE
        relkind = 'r' 
        AND nspname = 'public'
-- 创建字段备注视图
CREATE 
        OR REPLACE VIEW column_comment AS SELECT
        nspname,
        b.TABLE_NAME,
        A.attname,
        col_description ( A.attrelid, A.attnum ) AS COMMENT,
        concat_ws ( '', 'COMMENT ON COLUMN ', b.TABLE_NAME, '."', A.attname, '" is ''''' ) 
FROM
        pg_catalog.pg_attribute A,
        (
        SELECT C
                .oid,
                C.relname AS TABLE_NAME,
                n.nspname 
        FROM
                pg_catalog.pg_class
                C LEFT JOIN pg_catalog.pg_namespace n ON n.oid = C.relnamespace 
        WHERE
                C.relkind = 'r' 
                AND n.nspname = 'public' 
        ) b 
WHERE
        A.attrelid = b.oid 
        AND A.attnum > 0 
        AND NOT A.attisdropped 
        AND col_description ( A.attrelid, A.attnum ) IS NOT NULL 
ORDER BY
        b.TABLE_NAME,
        A.attnum;
        
--  执行脚本,循环删除表备注、字段备注      
DO $$ DECLARE
tableRecord record;
columnRecord record;
BEGIN
        FOR tableRecord IN ( SELECT * FROM table_comment )
        LOOP
                EXECUTE tableRecord.concat_ws;
        END LOOP;
        
        FOR columnRecord IN ( SELECT * FROM column_comment )
        LOOP
                EXECUTE columnRecord.concat_ws;
        END LOOP;
END $$;
-- 删除表备注视图、字段备注视图
DROP VIEW table_comment, column_comment;

关注公众号:熊猫Jay字节之旅,了解更多 AI 技巧 ~

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
存储 关系型数据库 PostgreSQL
|
存储 关系型数据库 Java
postgresql清理表空间
postgresql清理表空间
331 0
|
Oracle 安全 关系型数据库
如何在openGauss/PostgreSQL手动清理XLOG/WAL 文件?
openGauss/PostgreSQL中的预写式日志WAL(Write Ahead Log),又名Xlog或redo log,相当于oracle的online redo log, 不同的是oracle online redo log是提前创建几组滚动使用,但在opengauss中只需要本配置参数控制WAL日志的周期,数据库会一直的创建并自动清理,但存在一些情况WAL日志未清理导致目录空间耗尽,或目录空间紧张时手动删除wal日志时,比如如何确认在非归档模式下哪些WAL日志文件可以安全删除?
984 0
|
7月前
|
关系型数据库 MySQL 分布式数据库
PolarDB for PostgreSQL脚本问题之脚本执行失败如何解决
PolarDB for PostgreSQL是基于PostgreSQL开发的一款云原生关系型数据库服务,它提供了高性能、高可用性和弹性扩展的特性;本合集将围绕PolarDB(pg)的部署、管理和优化提供指导,以及常见问题的排查和解决办法。
|
7月前
|
SQL 关系型数据库 MySQL
MySQL【实践 02】MySQL迁移到PostgreSQL数据库的语法调整说明及脚本分享(通过bat命令修改mapper文件内的SQL语法)
MySQL【实践 02】MySQL迁移到PostgreSQL数据库的语法调整说明及脚本分享(通过bat命令修改mapper文件内的SQL语法)
272 0
|
7月前
|
SQL 关系型数据库 Shell
postgresql|数据库|批量执行SQL脚本文件的shell脚本
postgresql|数据库|批量执行SQL脚本文件的shell脚本
347 0
|
关系型数据库 MySQL 数据库
PostgreSQL数据库实现表字段的自增
PostgreSQL数据库实现表字段的自增
1932 0
LXJ
|
关系型数据库 PostgreSQL
postgresql备份脚本
postgresql备份脚本
LXJ
189 0
|
存储 关系型数据库 数据库
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 19 章 服务器配置_19.10. 自动清理
19.10. 自动清理 这些设置控制自动清理特性的行为。 详情请见第 24.1.6 节。请注意在每个表基础上可以重写这些设置; 参阅存储参数。 autovacuum (boolean) 控制服务器是否运行自动清理启动器后台进程。
1334 0