Greenplum(PostgreSql)函数实现批量删除表
Posted lbhqq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Greenplum(PostgreSql)函数实现批量删除表相关的知识,希望对你有一定的参考价值。
项目做库迁移,前期需要经常调整表结构语句,涉及多次的批量drop,本着偷懒精神写了这个函数。鉴于本函数在生产环境有巨大风险,建议测试完毕后立即删除。
主要步骤很简单:1)从pg_tables查询得到相关表名称;2)遍历查询结果拼接动态语句然后循环执行。
代码:
create or replace function vppp.func_drop_tables() returns void as $body$ -- 注意schema名称 declare tmp varchar(512); -- 存放拼接文本 stmp record; -- 记录类型可用于保存查询结果 i int; -- 计数 begin i := 1; for stmp in (select tablename table_nam from pg_tables where tableowner = ‘vppp‘ and schemaname=‘vppp‘) loop -- 这里vppp也是schema,默认和owner相同 tmp := ‘drop table vppp.‘ || stmt.bale_nam || ‘cascade;‘; --cascade表示级联删除 raise notice ‘currentTable is : % ------%‘, stmt.table_nam, i; -- 打印一下信息,当前表名称和序号。 if stmt.table_nam <> ‘A_T_Test‘ -- 我的库里有一个测试用的表,删除动作跳过。 then raise notice ‘drop______‘; -- execute tmp; -- 执行删除动作我这里注释掉,需要时再打开。 end if; i := i+1; end; $body$ language plpgsql volatile
代码是手打,本机也没有测试环境,如果有拼写错误请仔细检查一下。
以上是关于Greenplum(PostgreSql)函数实现批量删除表的主要内容,如果未能解决你的问题,请参考以下文章
Greenplum(PostgreSql)中函数内游标的使用实例
我可以使用 NIFI 在 GreenPlum 和 Postgresql 中运行存储函数吗?如果是,那么我应该使用哪个处理器和啥配置?
基于Promethues与Grafana的Greenplum分布式数据库监控的实现
Postgresql/Greenplum中将数字转换为字符串TO_CHAR函数前面会多出一个空格