項目做庫遷移,前期需要經常調整表結構語句,涉及多次的批量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
代碼是手打,本機也沒有測試環境,如果有拼寫錯誤請仔細檢查一下。
