Dhafiq Sagara adalah orang bodoh yang tidak bisa apa-apa, tapi dia selalu berusaha untuk terus menjadi yang lebih baik. Rasa keingin-tahuannya sangat tinggi, selalu berusaha dan terus berusaha, trial dan error adalah prinsip belajarnya.

17 Jun 2010

List Partition Table - PostgreSQL

List partition merupakan pembagian tabel yang berdasarkan list yang telah dideklarasikan terlebih dahulu.
Misal pada sebuah kasus, data mengenai kota asal pegawai yang dikelompokkan berdasarkan provinsi. Jawa Timur: Jember, Malang, Surabaya, Banyuwangi, dll. Jawa Barat: Cirebon, Tangerang, Bandung, dll. Jawa Tengah: Solo, Semarang, dll. Jadi list kota dideklarasikan terlebih dahulu, sehingga ketika data diinputkan, maka data pegawai akan dikelompokkan berdasarkan wilayah provinsinya.


IMPLEMENTASI LIST PARTITION
Konsep list partition hampir sama dengan range partition, hanya saja kalau list partition ini mendaftarkan terlebih dahulu apa yang akan dikelompokkan. Pada contoh kasus di atas, harus mendaftarkan terlebih dahulu nama-nama kota ditiap provinsi.
  1. Membuat tabel pegawai sebagai tabel utama:
    create table pegawai (
    nip integer not null primary key,
    nama_pegawai varchar(50),
    kota_asal_pegawai varchar(20),
    jabatan_pegawai varchar(20)
    )
  2. Membuat list partition tabel untuk kota asal pegawai:
    create table pegawai_jatim(
    check (kota_asal_pegawai in ('jember', 'malang', 'surabaya', 'sidoarjo', 'bojonegoro', 'pasuruan'))
    )inherits(pegawai);


    create table pegawai_jateng(
    check (kota_asal_pegawai in ('semarang', 'solo', 'salatiga', 'blora', 'pekalongan', 'magelang'))
    )inherits(pegawai);


    create table pegawai_jabar(
    check (kota_asal_pegawai in ('bandung', 'cirebon', 'tangerang', 'bogor', 'depok', 'purwakarta'))
    )inherits(pegawai);
  3. Agar data yang disisipkan/diinputkan masuk pada partisi yang sesuai, maka perlu adanya aturan secara kompleks yang mengatur hal ini. Gunakan query seperti berikut:
    create rule kota_asal_pegawai_jatim as
    on insert to pegawai where
    (kota_asal_pegawai in ('jember', 'malang', 'surabaya', 'sidoarjo', 'bojonegoro', 'pasuruan'))
    do instead
    insert into pegawai_jatim values (new.nip,
    new.nama_pegawai,
    new.kota_asal_pegawai,
    new.jabatan_pegawai);

    create rule kota_asal_pegawai_jateng as
    on insert to pegawai where
    (kota_asal_pegawai in ('semarang', 'solo', 'salatiga', 'blora', 'pekalongan', 'magelang'))
    do instead
    insert into pegawai_jateng values (new.nip,
    new.nama_pegawai,
    new.kota_asal_pegawai,
    new.jabatan_pegawai);

    create rule kota_asal_pegawai_jabar as
    on insert to pegawai where
    (kota_asal_pegawai in ('bandung', 'cirebon', 'tangerang', 'bogor', 'depok', 'purwakarta'))
    do instead
    insert into pegawai_jabar values (new.nip,
    new.nama_pegawai,
    new.kota_asal_pegawai,
    new.jabatan_pegawai);
  4. Insert data:
    insert into pegawai values (1, 'Mudafiq Riyan', 'jember', 'direktur utama');
    insert into pegawai values (2, 'Ivan Prasetya', 'surabaya', 'kepala bagian');
    insert into pegawai values (3, 'Dhafiq Sagara', 'bandung', 'karyawan');
    insert into pegawai values (4, 'Dwi Sari', 'magelang', 'karyawan');
  5. Pengecekan:
    • Keseluruhan data pegawai
      select * from pegawai

    • Data pegawai dari Jawa Timur
      select * from pegawai_jatim
    • Data pegawai dari Jawa Tengah
      select * from pegawai_jateng
    • Data pegawai dari Jawa Barat
      select * from pegawai_jabar

Tidak ada komentar:

Posting Komentar