Skip to main content

PostgreSQL | Set Default Output Data Binary/ByteA PostgreSQL 9.x

Hari ini saya sedang melakukan pengecekan salah satu modul pekerjaan saya, yakni penyimpanan data image (binary/bytea) ke dalam database PostgreSQL (saya menggunakan PostgreSQL 9.1.6 pada Ubuntu 12.04).
Ternyata setelah dilakukan pengujian retrieval data gambar menjadi kacau, file image hasil generate dari database tidak sesuai dengan image asli yang datanya disimpan ke dalam database.

Setelah googling, saya menemukan petunjuk bahwa hal ini terjadi karena default output data binary pada PostgreSQL 9.1.6 mempunyai format hex.

Untuk mengatasi hal tersebut kita bisa melakukan alter pada database yang bersangkutan dengan perintah sebagai berikut (perintah dilakukan pada psql prompt bukan bash prompt linux/Ubuntu):

database=> ALTER DATABASE database SET bytea_output TO 'escape';


Namun kekurangan perintah tersebut adalah kita harus melakukan alter pada semua database yang kita miliki.
Hal ini tentu sangat merepotkan bila database yang ada jumlahnya cukup banyak.

Untuk mengatasi hal ini kita bisa mengedit konfigurasi PostgreSQL (postgresql.conf) dengan cara sebagai berikut:

sudo nano /etc/postgresql/9.1/main/postgresql.conf


lokasi file tergantung pada cara sahabat menginstall PostgreSQL dan silahkan pilih text editor yang anda sukai (di sini saya menggunakan nano).
Saya melakukan instalasi PostgreSQL dari Ubuntu Repository, sehingga secara default file postgresql.conf terletak pada folder /etc/postgresql/[versi]/main.

dari editor nano kemudian lakukan pencarian kata 'bytea_output' dengan cara menekan kombinasi tombol CTRL-W :


#bytea_output = 'hex'                 # hex, escape


Di situ terlihat bahwa konfigurasi bytea_output masih dicomment.
Untuk meng-uncomment, hapus karakter '#' dan ubah kondisi 'hex' menjadi 'escape'

 bytea_output = 'escape'                 # hex, escape

Kemudian simpan perubahan file postgresql.conf.
Setelah itu restart server PostgreSQL dengan menjalankan perintah berikut:

sudo /etc/init.d/postgresql restart


Setelah restart server seharusnya file hasil generate dari database sudah sesuai dengan file aslinya.

Comments

Popular posts from this blog

Java | Menambahkan Dialog Konfirmasi Sebelum Keluar dari Aplikasi

Kali ini saya ingin berbagi cara sederhana untuk menampilkan dialog konfirmasi sebelum keluar dari aplikasi. Dengan syarat aplikasi yang kita buat harus menggunakan JFrame sebagai frame utama. Langkah-langkah yang harus kita lakukan adalah sebagai berikut: 1. Ganti property default close operation dari JFrame menjadi DO_NOTHING_ON_CLOSE, value ini dimaksudkan agar ketika button close dari JFrame diklik tidak akan terjadi apa-apa. Sebaliknya jika valuenya adalah EXIT_ON_CLOSE, maka ketika button close dari JFrame diklik maka program akan tertutup. setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 2. Yang kedua adalah kita harus menambahkan WindowListener pada JFrame. Interface WindowListener memiliki beberapa method terkait event terhadap window (yakni JFrame), namun yang harus kita override hanyalah method windowClosing, method ini akan dipanggil ketika button close diklik.   Sebagai informasi, apabila kita menambahkan WindowListener secara langsung maka semua method dari i

PostgreSQL | Membuat Nomor Urut dengan Window Function ROW_NUMBER()

Pengguna Oracle Database mungkin sudah sangat familiar dengan clausa ROWNUM. Bagi yang belum tahu apa itu ROWNUM,  ROWNUM  adalah  pseudo column  (kolom bayangan) yang berisi nomor urut dari hasil eksekusi query. Sayangnya fitur ini belum tersedia pada PostgreSQL . Namun ada kabar gembira bagi kita pengguna  PostgreSQL , dimana sejak versi 8.4, PostgreSQL telah menyediakan 1 window function  yang mengakomodasi masalah ROWNUM, yakni ROW_NUMBER() . Sesuai dengan dokumentasi yang disediakan, cara menggunakan fungsi ini adalah dengan menggabungkannya dengan clausa OVER  yang didalamnya berisi clausa ORDER BY . Supaya lebih jelas dan lebih mudah dipahami, lebih baik langsung kita praktekkan saja. Saya membuat sebuah table dengan struktur sebagai berikut CREATE TABLE name ( code CHAR(1) ); yang kemudian saya isi kolom code dengan alfabet mulai dari a s/d z  dan angka 0 (nol). Sebelumnya kita lakukan query ke table name tanpa clausa ORDER BY : SELECT code FROM name; Outputny

PostgreSQL | Ekspresi Kondisional CASE Pada Query

Salah satu fitur yang saya sukai dari PostgreSQL adalah dapat digunakannya ekspresi kondisional pada query. PostgreSQL menyediakan ekpresi CASE yang memiliki fungsi yang sama dengan statemen IF/ELSE pada bahasa pemrograman. Berikut adalah bentuk dari ekspresi CASE pada PostgreSQL CASE WHEN condition THEN result      [WHEN ...]      [ELSE result] END Untuk melihat bagaimana cara menggunakan ekspresi CASE, saya memiliki sebuah tabel number dengan sebuah kolom nomor yang memuat data bertipe integer. SELECT nomor FROM number ORDER BY nomor;  nomor -------      1      3     32     37     38     97 (6 rows) Sekarang mari kita gunakan ekspresi CASE untuk menentukan apakah nomor tersebut merupakan bilangan ganjil atau genap. SELECT nomor, (CASE WHEN nomor % 2 = 0 THEN 'Bilangan Genap' ELSE 'Bilangan Ganjil' END) AS status FROM number ORDER BY nomor; dan hasilnya adalah sebagai berikut:  nomor |     status     -------+-----------------      1 | Bilangan