特定のスキーマ内のすべてのテーブルから、条件を満たすすべてのデータを非アクティブにする必要があります。アクティブ/非アクティブ値は、すべてのテーブルがこの列を持つブール値です。すべての非アクティブデータを削除するSQL
どうすればよいですか?
特定のスキーマ内のすべてのテーブルから、条件を満たすすべてのデータを非アクティブにする必要があります。アクティブ/非アクティブ値は、すべてのテーブルがこの列を持つブール値です。すべての非アクティブデータを削除するSQL
どうすればよいですか?
を言うクエリにそれを追加します。
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();
に電話してください!
これを行うだけでは、クエリを作成してクエリを作成する必要はありません。このような
何か:
select distinct tablename from information_schema.columns where columnname = 'Active'
はあなたのテーブルのリストを与えるだろうそしてちょうどあなたがそれを行うための関数を作成することができます
delete from <tablename> where active = 0
自分の努力やスキーマに関する情報を表示せずに解決策を求めています。 – Nicarus
この質問は私には完璧に聞こえます。私はなぜそんなに多くの票を見ることができません。 – Christian