HGDB批量删除表名类似的表
1. 查看数据库中有一系列tb_xxx命名的表
highgo=# \dt
关联列表
架构模式 | 名称 | 类型 | 拥有者
----------+----------------+--------+--------
public | hg_t_audit_log | 数据表 | syssao
public | list | 分区表 | sysdba
public | rag1 | 分区表 | sysdba
public | tb_230101 | 数据表 | sysdba
public | tb_230201 | 数据表 | sysdba
public | tb_230301 | 数据表 | sysdba
public | tb_230401 | 数据表 | sysdba
public | tb_230501 | 数据表 | sysdba
public | tb_230601 | 数据表 | sysdba
public | tb_230701 | 数据表 | sysdba
(10 行记录)
2. 创建函数表的函数
create or replace function droptb() RETURNS VOID AS $$
DECLARE
tbname CURSOR FOR
select tablename from pg_tables where tablename like 'tb%' and schemaname ='public';
sql varchar;
BEGIN
for stmt in tbname loop
sql := 'drop table if exists ' || quote_ident(stmt.tablename) || ' cascade;';
EXECUTE sql;
end loop;
END;
$$ LANGUAGE plpgsql;
3. 调用函数,并验证表被成功删除
highgo=# select droptb();
droptb
--------
(1 行记录)
highgo=# \dt
关联列表
架构模式 | 名称 | 类型 | 拥有者
----------+----------------+--------+--------
public | hg_t_audit_log | 数据表 | syssao
public | list | 分区表 | sysdba
public | rag1 | 分区表 | sysdba
(3 行记录)