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

 

代碼是手打,本機也沒有測試環境,如果有拼寫錯誤請仔細檢查一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM