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 技巧 ~