Mengatasi Masalah Restore Data Di PostgreSQL

PostgreSQL logoBeberapa waktu lalu saat mencoba melakukan restore data dari file backup PostgreSQL saya menemukan satu kejanggalan. Setelah proses restore selesai, saya mencoba mencari data dari sebuah tabel. Namun setelah dicari ternyata tabel tersebut tidak dapat saya temukan. Hmm, salah saya juga tadi tidak memperhatikan error yang muncul saat proses restore selesai. Terpaksa proses restore diulangi lagi, dan setelah selesai saya coba periksa log error yang muncul. Ternyata tabel yang saya cari tidak berhasil di-restore disebabkan ada salah satu field yang “default value”-nya digenerate oleh sebuah function.

id_req character varying(12) DEFAULT random_string(12)

Lalu setelah ditelusuri lebih lanjut, ternyata function tersebut juga tidak berhasil di-create disebabkan language plpgsql yang dipakai untuk mendefinisikan function tersebut tidak ditemukan.

Berikut adalah isi dari function random_string :

CREATE OR REPLACE FUNCTION random_string(length integer)
RETURNS text AS
$BODY$
declare
chars text[] := '{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}';
result text := '';
i integer := 0;
begin
if length < 0 then
raise exception 'Given length cannot be less than 0';
end if;
for i in 1..length loop
result := result || chars[1+random()*(array_length(chars, 1)-1)];
end loop;
return result;
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;

Setelah googling beberapa saat, saya sudah mengetahui duduk permasalahannya. Selama ini dalam melakukan backup melalui command pg_dump, file backup (.sql) digenerate masing-masing berdasarkan schema yang ada di database. Jadi tidak keseluruhan database dibackup kedalam satu file. Tujuannya supaya jika diperlukan untuk restore data cukup me-restore schema yang diperlukan, tidak perlu restore full satu database. Namun ternyata pg_dump dengan cara tersebut tidak menyertakan command “create language plpgsql” ke dalam file hasil backup.

Jadi untuk melakukan restore dari file backup tersebut diperlukan tambahan satu langkah, urutannya sebagai berikut:
1. Create database (saya memakai PgAdmin)
membuat database baru postgreSQL
2. Pilih database tersebut, lalu jalankan command (query) “create language plpgsql
create language plpgsql
3. Setelah itu baru lakukan Restore dari file backup
restore backup file postgreSQL