1. ホーム
  2. postgresql

[解決済み] Postgresデータベースの全テーブルを切り捨てる

2022-04-20 13:06:31

質問

PostgreSQLデータベースを再構築する前に、定期的にデータをすべて削除する必要があります。SQLで直接これを行うにはどうしたらよいでしょうか?

今のところ、実行する必要のあるすべてのコマンドを返すSQL文は何とか思いつくことができました。

SELECT 'TRUNCATE TABLE ' ||  tablename || ';' FROM pg_tables WHERE tableowner='MYUSER';

しかし、一度手に入れたものをプログラム的に実行する方法が見当たりません。

解決方法は?

FrustratedWithFormsDesignerの言うとおり、PL/pgSQLで可能です。以下はそのスクリプトです。

CREATE OR REPLACE FUNCTION truncate_tables(username IN VARCHAR) RETURNS void AS $$
DECLARE
    statements CURSOR FOR
        SELECT tablename FROM pg_tables
        WHERE tableowner = username AND schemaname = 'public';
BEGIN
    FOR stmt IN statements LOOP
        EXECUTE 'TRUNCATE TABLE ' || quote_ident(stmt.tablename) || ' CASCADE;';
    END LOOP;
END;
$$ LANGUAGE plpgsql;

これはストアド関数を作成し(一度だけ行う必要があります)、その後、次のように使用できます。

SELECT truncate_tables('MYUSER');