2016-08-12 4 views
-3

特定のスキーマ内のすべてのテーブルから、条件を満たすすべてのデータを非アクティブにする必要があります。アクティブ/非アクティブ値は、すべてのテーブルがこの列を持つブール値です。すべての非アクティブデータを削除するSQL

どうすればよいですか?

+1

自分の努力やスキーマに関する情報を表示せずに解決策を求めています。 – Nicarus

+0

この質問は私には完璧に聞こえます。私はなぜそんなに多くの票を見ることができません。 – Christian

答えて

0

を言うクエリにそれを追加します。

CREATE OR REPLACE FUNCTION delete_inactive_records() 
RETURNS TEXT AS 
$BODY$ 
DECLARE VTABLES  RECORD; 
    VRESULT  TEXT; 
    VNUM_ROWS INTEGER; 
BEGIN 
    VRESULT = ''; 
    FOR VTABLES IN (
      select distinct table_schema || '.' || table_name as table_name 
      from information_schema.tables t 
      where exists (
        select 1 
        from information_schema.columns c 
        where c.table_catalog = t.table_catalog 
        and  c.table_schema = c.table_schema 
        and  c.table_name = t.table_name 
        and  c.column_name = 'active' 
        and  t.table_catalog in ("<your_table_catalog1>", "<your_table_catalog2>", "<etc>") 
        ) 
      order by 1 
      ) 
    LOOP 
     RAISE NOTICE 'DELETING FROM %...', VTABLES.TABLE_NAME; 
     EXECUTE ('DELETE FROM ' || VTABLES.TABLE_NAME || ' WHERE active = 0'); 
     get diagnostics vNUM_ROWS = ROW_COUNT; 
     VRESULT = VRESULT || vNUM_ROWS || ' records were deleted from ' || VTABLES.TABLE_NAME || chr(13);  
    END LOOP; 
    return VRESULT; 
end; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE; 

テーブルを「クリーンアップ」したい場合は、いつでもselect delete_inactive_records();に電話してください!

1

これを行うだけでは、クエリを作成してクエリを作成する必要はありません。このような

何か:

select distinct tablename from information_schema.columns where columnname = 'Active' 

はあなたのテーブルのリストを与えるだろうそしてちょうどあなたがそれを行うための関数を作成することができます

delete from <tablename> where active = 0 
関連する問題