postgresql 数据库 删除所有注释

**

postgresql 数据库 删除所有注释

**

在工作中常常遇到特殊情况 ,我这次就是碰到要求是删除数据库中的所有注释 (表注释和列注释)
注释一条条的删除太麻烦了 我们可以批量删除注释
在Oracle 数据库中可以 通过user_col_comments 这个表来实现删除注释

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

但是在postgresql 数据库中是没有一个类似的表 但是我们也可以通过语句来实现这个功能
postgresql 数据库 有 pg_class 和 pg_namespace 表

pg_class 记录表和几乎所有具有列或者像表的东西。 这包括索引(但还要参 见 pg_index )、序列 ( pg_sequence
)、视图、物化视图、组合类型和 TOAST 表,参 见 relkind 。

pg_namespace 存储名字空间。名字空间是 SQL 模式之下的结构:每个名字空间拥有一个
独立的表、类型等的集合,且其中没有名字冲突

详情可以参考pg_class https://blog.csdn.net/pg_hgdb/article/details/79455123?utm_source=copy
pg_namespace

通过这两个表我们就能实现Oracle中的user_col_comments表的功能了
**

1.删除表的注释

**
首先 我们需要确定我们需求: 模式名,表名,注释 然后拼接成语句

SELECT
	n.nspname,
	relname AS tabname,
	obj_description ( relfilenode, 'pg_class' ) AS COMMENT,
	concat_ws ( '', 'COMMENT ON TABLE "', nspname, '"."', relname, '" is '''';' ) 
FROM
	pg_class
	C LEFT JOIN pg_catalog.pg_namespace n ON n.oid = C.relnamespace 
WHERE
	relkind = 'r' 
	AND obj_description ( relfilenode, 'pg_class' ) IS NOT NULL;

因涉及公司机密做了模糊处理因涉及公司机密做了模糊处理

nspname  --表所在的模式
tabname --表名
comment  --表注释
concat_ws --要执行的语句

**

2.删除列的注释

**
想法跟表的一样,这里就不说了

SELECT
	nspname,
	b.TABLE_NAME,
	A.attname,
	col_description ( A.attrelid, A.attnum ) AS COMMENT,
	concat_ws ( '', 'COMMENT ON COLUMN ', nspname, '.', 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' 
	) 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;

在这里插入图片描述
3.执行语句
有了删除语句你就可以复制,粘贴 然后执行语句了 如果表太多可以写个函数自动执行…

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yang_z_1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值