PostgreSQL Stored Function Empty Whole Database

Print Friendly

Saat development aplikasi Delphi dengan database sering kita mengisi data dalam tabel-tabel kita untuk ujicoba. Dan setelah rampung, data-data ini akan kita hapus. Yang masalah adalah ketika tabel-tabel dalam database kita cukup banyak dan harus dikosongkan satu demi satu. Adakah cara singkat untuk melakukannya?

Apabila menggunakan database PostgreSQL, kita dapat memanfaatkan fitur stored procedure PostgreSQL untuk menjalankan tugas ini. Keuntungan yang kita peroleh selain pekerjaan menjadi mudah, stored procedure ini juga tersimpan dalam database dan setiap waktu dapat kita gunakan.

Saya sendiri menggunakan SQL berikut untuk mengosongkan semua tabel.

select empty_database(username)

Di mana empty_database() adalah sebuah stored function yang akan menjalan perintah pengosongan tabel dalam database PostgreSQL.

Untuk membuat stored function empty_database() ini, jalankan PgAdmin dan database yang akan dikosongkan. Klik tool SQL Editor. Lihat gambar, saya menandainya dengan kotak merah:

Di Window SQL Editor, hapus isinya dan masukkan kode di bawah:

CREATE OR REPLACE FUNCTION empty_database(username character varying)
  RETURNS void AS
$BODY$
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;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION empty_database(character varying) OWNER TO postgres;

Stored function di atas memerlukan sebuah parameter input, yaitu username, yang menjadi pemilik tabel-tabel yang akan dihapus. Jadi tabel-tabel yang ownernya berbeda tidak akan dihapus. Defaultnya hanya satu username yaitu “postgres”.

Bandingkan dengan punya saya:

Setelah oke, tekan F5 untuk menjalankan SQL yang ada. Setelah selesai, Anda dapat mengosongkan database dengan menjalan SQL berikut:

select empty_database('postgres');

Dan tunggu sampai selesai. Lama proses tergantung dari struktur database, keterkatian antar tabel semisal trigger dan foriegn key dan faktor-faktor lainnya.

Demikian tulisan singkat ini. Semoga ada manfaat :)

Joko Rivai

 

Comments

comments

Powered by Facebook Comments