Tampilkan postingan dengan label linux. Tampilkan semua postingan
Tampilkan postingan dengan label linux. Tampilkan semua postingan

Kamis, 26 Juni 2014

SMS Gateway Dengan gammu di Ubuntu

Setelah lama bermain-main sms gateway dengan kannel, tadi barusan nyoba pake gammu, ternyata detek juga hp Benq-siemens ef51 jadi modem heheheh ini seidikit tutornya
install gammu dengan cara
sucks05@newbie:~$ sudo apt-get install gammu
setelah di selesai buat config buat gammu nya
sucks05@newbie:~$ cd /etc/
sucks05@newbie:/etc$ sudo touch gammurc
sucks05@newbie:/etc$ sudo vi gammurc
isi file gammurc dengan ini
[gammu]
port = /dev/ttyACM0
#model = 6110
connection = at19200
#synchronizetime = yes
#logfile = gammulog
#logformat = textall
#use_locking = yes
#gammuloc = locfile
#startinfo = yes
#gammucoding = utf8
#rsslevel = teststable
#usephonedb = yes

untuk port dan connection bisa diganti sesuai hp nya nanti, kebetulan itu settingan untuk benq-siemens ef51.
sekarang test koneksi ke hpnya dengan cara
sucks05@newbie:~$ gammu –identify
kalau di layarku munculnya gini nih…
sucks05@newbie:~$ gammu –identify
Manufacturer : OK
Model : unknown (PANB2A)
Firmware : SW ver: 1.20
IMEI : IMEI: 35856000302865-2
SIM IMSI : 510015460084747

nah kalo dah gitu brarti dah kedetek, tinggal coba kirim sms aja, caranya gini nih…
sucks05@newbie:~$ gammu sendsms text +625417190600
Enter message text and press ^D:
coba gammu

setelah selesai mengetik pesannya tekan ctrl+D
maka nanti akan muncul begini kalo sms berhasil terkirim
If you want break, press Ctrl+C…
Sending SMS 1/1….waiting for network answer..OK, message reference=85

heheh segitu dulu kali yee tutornya… nanti sambung lagi, mau lanjut ngoprek lagi :D

Jumat, 10 Juli 2009

INTERNETAN PAKE HP SMART D1200

Langkah pertama –> Tancapkan kabel USB dan HP Smart D1200 ke komputer (hehehee….), kemudian bukalah konsole (saya saranin masuk aja ke root biar bisa ngakses penuh terhadap perintah-perintah yang nantinya dimasukkan ). Kemudian ketikkan perintah lsusb (untuk mengetahui usb yang masuk) maka akan ditampilkan : 
view plaincopy to clipboardprint?
  
1.Bus 005 Device 003: ID 15eb:0001 
2.Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub 
3.Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub 
4.Bus 003 Device 002: ID 15d9:0a37 
5.Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub 
6.Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub 
7.Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 
Bus 005 Device 003: ID 15eb:0001
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 15d9:0a37
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Nah… kemungkinan USB baru dari HP Smart D1200 yang kita masukkan adalah pada baris pertama yaitu : “Bus 005 Device 003: ID 15eb:0001″ (kalau misalkan di komputer anda berbeda ya…. tinggal pilih aja coba-coba tapi kemungkinan adalah yang paling atas karena yang terakhir kita masukkan) 

Langkah Kedua –> Aktifkan modul kernel usbserial berdasarkan id hardware. dengan cara mengetikkan perintah : 

  
modprobe usbserial vendor=0x15eb product=0x0001

Langkah Ketiga –> Periksa device apakah telah dikenali tanpa masalah oleh Linux dengan cara mengetikkan perintah dmesg Jika tidak ada masalah kurang lebih akan dihasilkan kode sebagai berikut : 
  
view plaincopy to clipboardprint?
1.bootsplash: status on console 0 changed to on 
2.usb 5-2: USB disconnect, address 2 
3.usb 5-2: new full speed USB device using uhci_hcd and address 3 
4.usb 5-2: configuration #1 chosen from 1 choice 
5.usb 5-2: New USB device found, idVendor=15eb, idProduct=0001 
6.usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 
7.usb 5-2: Product: CDS4 
8.usb 5-2: Manufacturer: VIA Telecom 
9.usbcore: registered new interface driver usbserial 
10.drivers/usb/serial/usb-serial.c: USB Serial support registered for generic 
11.usbserial_generic 5-2:1.0: generic converter detected 
12.usb 5-2: generic converter now attached to ttyUSB0 
13.usbserial_generic 5-2:1.1: generic converter detected 
14.usb 5-2: generic converter now attached to ttyUSB1 
15.usbcore: registered new interface driver usbserial_generic 
bootsplash: status on console 0 changed to on
usb 5-2: USB disconnect, address 2
usb 5-2: new full speed USB device using uhci_hcd and address 3
usb 5-2: configuration #1 chosen from 1 choice
usb 5-2: New USB device found, idVendor=15eb, idProduct=0001
usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 5-2: Product: CDS4
usb 5-2: Manufacturer: VIA Telecom
usbcore: registered new interface driver usbserial
drivers/usb/serial/usb-serial.c: USB Serial support registered for generic
usbserial_generic 5-2:1.0: generic converter detected
usb 5-2: generic converter now attached to ttyUSB0
usbserial_generic 5-2:1.1: generic converter detected
usb 5-2: generic converter now attached to ttyUSB1
usbcore: registered new interface driver usbserial_generic
Artinya USB HP Smart D1200 telah dikenali dengan baik dan dapat digunakan fungsi-fungsinya. 

Langkah Keempat –> Editlah file wvdial.conf menjadi seperti berikut ini : 
view plaincopy to clipboardprint?
  
1.[Dialer cdma] 
2.Modem = /dev/ttyUSB0 
3.Baud = 115200 
4.Init1 = AT+CRM=1; +CMUX=1; +CPS=33; +CTA=0 
5.Init2 = 
6.Init3 = 
7.Area Code = 
8.Phone = #777 
9.Username =smart 
10.Password =smart 
11.Ask Password = 0 
12.Dial Command = ATDT 
13.Stupid Mode = 1 
14.Compuserve = 0 
15.Force Address = 
16.Idle Seconds = 300 
17.DialMessage1 = 
18.DialMessage2 = 
19.ISDN = 0 
20.Auto DNS = 1 
[Dialer cdma]
Modem = /dev/ttyUSB0
Baud = 115200
Init1 = AT+CRM=1; +CMUX=1; +CPS=33; +CTA=0
Init2 =
Init3 =
Area Code =
Phone = #777
Username =smart
Password =smart
Ask Password = 0
Dial Command = ATDT
Stupid Mode = 1
Compuserve = 0
Force Address =
Idle Seconds = 300
DialMessage1 =
DialMessage2 =
ISDN = 0
Auto DNS = 1

Langkah Terakhir –> Pada konsole ketikkan perintah wvdial cdma 

Akhirnya … bisa online juga kan pake HP Smart D1200 dan Linux sebagai sistem operasi yang menyenangkan. Selamat mencoba semoga bermanfaat.

Selasa, 14 April 2009

Download Auto File update Kaspresky

yang harus di persiapkan adalah :
install wget kalo belum ada.
cara instalnya : #apt-get install wget

kemudian simpan script berikut kedalam file antivirkaspresky yang bisa anda download.

agar tidak perlu dijalankan manual bisa anda masukan kedalam crontab
dengan perintah #crontab -e
kemudian masukan perintah didalam editornya :
0 5 * * * /home/surya/antivirkaspresky

arti script crontab diatas adalah
setiap jam 5 pagi maka secara auto matis akan mendownload update antivir kaspresky

#!/bin/bash
echo 'DOWNLOAD ANTIVIR UPDATE FOR KARPRESKY'
# Kapresky Auto Download
# Created by suryahawk

#ISI FOLDER TUJUAN SESUAI TUJUAN ANDA
folder="/home/surya/karpresky/antiVirus/update"


# URL Jawapos
URLT="http://dnl-eu5.kaspersky-labs.com/zips/av-i386-cumul.zip"
URLW="http://dnl-eu5.kaspersky-labs.com/zips/av-i386-weekly.zip"
URLD="http://dnl-eu5.kaspersky-labs.com/zips/av-i386-daily.zip"


# Tanggal Hari ini
BLN=`date +%Y%m`
TGL=`date +%Y%m%d`
HARI=`date +%d`
# Rename mulai dari 1
FILENAME=1

# Buat Folder sesuai tanggal
LOKASI=$folder/$BLN/$TGL
echo 'BUAT FOLDER : '$LOKASI
mkdir -p $LOKASI
echo 'FOLDER '$LOKASI' SELESAI'

# Download file zip
echo '-------------------------------------------MULAI-------------------------------------------'
if [ $HARI == 01 ]; then
echo '>>> DOWNLOAD TOTAL'
echo 'wget -nv -O '$LOKASI'/TOTAL'$TGL'.zip '$URLT
wget -nv -O $LOKASI/TOTAL$TGL.zip $URLT
fi

if [ $HARI == 03 ]; then
echo '>>> DOWNLOAD MINGGUAN'
echo 'wget -nv -O '$LOKASI'/MINGGU'$TGL'.zip '$URLW
wget -nv -O $LOKASI/MINGGU$TGL.zip $URLW
else if [ $HARI == 10 ]; then
echo '>>> DOWNLOAD MINGGUAN'
echo 'wget -nv -O '$LOKASI'/MINGGU'$TGL'.zip '$URLW
wget -nv -O $LOKASI/MINGGU$TGL.zip $URLW
else if [ $HARI == 17 ]; then
echo '>>> DOWNLOAD MINGGUAN'
echo 'wget -nv -O '$LOKASI'/MINGGU'$TGL'.zip '$URLW
wget -nv -O $LOKASI/MINGGU$TGL.zip $URLW
else if [ $HARI == 24 ]; then
echo '>>> DOWNLOAD MINGGUAN'
echo 'wget -nv -O '$LOKASI'/MINGGU'$TGL'.zip '$URLW
wget -nv -O $LOKASI/MINGGU$TGL.zip $URLW
fi
fi
fi
fi
if [ $HARI == 02 ]; then
echo '>>> DOWNLOAD HARIAN'
echo 'wget -nv -O '$LOKASI'/HARI'$TGL'.zip '$URLD
wget -nv -O $LOKASI/HARI$TGL.zip $URLD
else if [ $HARI == 05 ]; then
echo '>>> DOWNLOAD HARIAN'
echo 'wget -nv -O '$LOKASI'/HARI'$TGL'.zip '$URLD
wget -nv -O $LOKASI/HARI$TGL.zip $URLD
else if [ $HARI == 08 ]; then
echo '>>> DOWNLOAD HARIAN'
echo 'wget -nv -O '$LOKASI'/HARI'$TGL'.zip '$URLD
wget -nv -O $LOKASI/HARI$TGL.zip $URLD
else if [ $HARI == 11 ]; then
echo '>>> DOWNLOAD HARIAN'
echo 'wget -nv -O '$LOKASI'/HARI'$TGL'.zip '$URLD
wget -nv -O $LOKASI/HARI$TGL.zip $URLD
else if [ $HARI == 14 ]; then
echo '>>> DOWNLOAD HARIAN'
echo 'wget -nv -O '$LOKASI'/HARI'$TGL'.zip '$URLD
wget -nv -O $LOKASI/HARI$TGL.zip $URLD
else if [ $HARI == 17 ]; then
echo '>>> DOWNLOAD HARIAN'
echo 'wget -nv -O '$LOKASI'/HARI'$TGL'.zip '$URLD
wget -nv -O $LOKASI/HARI$TGL.zip $URLD
else if [ $HARI == 20 ]; then
echo '>>> DOWNLOAD HARIAN'
echo 'wget -nv -O '$LOKASI'/HARI'$TGL'.zip '$URLD
wget -nv -O $LOKASI/HARI$TGL.zip $URLD
else if [ $HARI == 23 ]; then
echo '>>> DOWNLOAD HARIAN'
echo 'wget -nv -O '$LOKASI'/HARI'$TGL'.zip '$URLD
wget -nv -O $LOKASI/HARI$TGL.zip $URLD
else if [ $HARI == 26 ]; then
echo '>>> DOWNLOAD HARIAN'
echo 'wget -nv -O '$LOKASI'/HARI'$TGL'.zip '$URLD
wget -nv -O $LOKASI/HARI$TGL.zip $URLD
else if [ $HARI == 29 ]; then
echo '>>> DOWNLOAD HARIAN'
echo 'wget -nv -O '$LOKASI'/HARI'$TGL'.zip '$URLD
wget -nv -O $LOKASI/HARI$TGL.zip $URLD
else if [ $HARI == 31 ]; then
echo '>>> DOWNLOAD HARIAN'
echo 'wget -nv -O '$LOKASI'/HARI'$TGL'.zip '$URLD
wget -nv -O $LOKASI/HARI$TGL.zip $URLD
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
echo '-------------------------------------------SELESAI-------------------------------------------'
echo ''
echo ''


exit



JawaPos Downloader untuk Linux

Program ini saya hanya memperbaiki biar auto, agar tidak manual seperti pada awalnya. dan bisa digunakan pada crontab
software ini pertama kali dibuat oleh sodara Sugeng judulnya :
Download Jawapos ePaper menggunakan bash (lagi)
Aku cuma memperbaiki dikit source codenya biar bisa digunakan dalam crontab.
sebelum menjalankan script ini harus di install dulu :
wget dan pdftk
bagai mana cara installnya bisa dilihat di Download Jawapos ePaper menggunakan bash (lagi)

file ini di simpan dalam file jawapos.sh
untuk download outomatis bisa melakukan setting pada crontap dengan perintah crontab -e
yang perlu diingat sesuakan folder tempat penyimpanan file dengan crontabnya.
misal ingin anda simpan dalam forlder /var/www/jawapos
karena folder www adalah milik root maka crontabnya harus sebagai sudo.
didalam crontab di isi
0 8 * * * /home/surya/jawapos.sh
artinya pada menit ke 0 dan pada jam 8 crontab akan melakukan esekusi script jawapos.sh

or dalam bentuk file bisa anda download disini

#!/bin/bash
echo 'MULAI DIJALANKAN'
# Jawapos ePaper Downloader
# Created by Sugeng Doyle
# Re-Build by suryahawk

#ISI FOLDER TUJUAN
folder="/var/www"


# URL Jawapos
URL="http://versipdf.jawapos.co.id/index.php?detail="

# Fix Link untuk direct PDF file ePaper
PAGE=(00241260 00361260 00481260 00601260 00721260 00841260 00961260 01081260 01201260 001200241260 002400241260 003600241260 004800241260 006000241260 007200241260 008400241260)

# Jawapos membagi kategori link berdasarkan jp, or, mt
PAGEDL=("jp" "or" "mt")

# Tanggal Hari ini
TGL=`date +%d-%b-%Y`

# Rename mulai dari 1
FILENAME=1

# Buat Folder sesuai tanggal
echo 'Buat folder : '$folder/$TGL
mkdir -p $folder/$TGL
echo 'folder '$folder/$TGL' SELESAI'
# Looping kategori linknya
for i in ${PAGEDL[@]}; do
URL_DL=$URL$i

# Looping halaman
for j in ${PAGE[@]}; do

if [ ${#FILENAME} == 1 ]; then
FILE="00"$FILENAME
else if [ ${#FILENAME} == 2 ]; then
FILE="0"$FILENAME
else FILE=$FILENAME
fi
fi

# Check apakah link tersebut aktif
echo 'BEGIN CHECK :'$URL_DL"_det&file_det="$j
CHECK=`wget -nv --spider $URL_DL"_det&file_det="$j`
echo 'END CHECK :'$URL_DL"_det&file_det="$j
if [ ${#CHECK} == 0 ]; then
# Download file pdf ePaper
echo '-----------------'$FILE' MULAI-------------------'
echo $FILE' : wget -nv -O '$folder/$TGL/$FILE'.pdf '$URL_DL'_det&file_det='$j
wget -nv -O $folder/$TGL/$FILE.pdf $URL_DL"_det&file_det="$j
echo '-----------------'$FILE' SELESAI-----------------'
echo $FILE' : wget SELESAI'
#kget $folder/$TGL/$FILE.pdf $URL_DL"_det&file_det="$j
let FILENAME+=1
INFO=`ls -s $folder/$TGL/$FILE".pdf"`
echo 'INFO :'$INFO
BND=${#INFO}
if [ $BND == 30 ]; then
# Download file pdf ePaper
echo 'DEL: '$i'>>'$FILE'>>'$i'>>>' $INFO'>>>>'${#INFO}
rm $folder/$TGL/$FILE.pdf
else if [ $BND == 21 ]; then
# Download file pdf ePaper
echo 'DEL: '$i'>>'$FILE'>>'$i'>>>' $INFO'>>>>'${#INFO}
rm $folder/$TGL/$FILE.pdf


else echo $i'>>'$FILE'>>'$i'>>>' $INFO'>>>>'${#INFO}
fi
fi
fi
echo $FILE' SELESAI'

done
done
mkdir -p $folder/jawapos
pdftk $folder/$TGL/*.pdf cat output $folder/jawapos/jawapos_$TGL.pdf
rm -r $folder/$TGL

exit


Jumat, 03 April 2009

Setting CVS SERVER

CVS adalah sebuah sistem kendali versi (version control system). Dengan menggunakan CVS sejarah dari perubahan-perubahan file bisa tercatat dengan rapi.

Beberapa fitur dari CVS :

  • Dapat mengambil kembali versi lalu jika ada kesalahan di kemudian hari.Dapat menyimpa semua file-file yang pernah dibuat atau pernah di edit.
  • Mengatasi terjadinya konflik antar user jika file di gunakan dalam sebuah kelompok.

Sejarah Singkat CVS :

CVS bermula sebagai serangkaian script shell yang ditulis oleh Dick Grune, yang dikirimkan ke newsgroup comp.sources.unix dalam rilis 6 volume pada Desember 1986. Meski tidak ada kode yang berasal dari script ini dalam versi baru CVS, banyak algoritma resolusi konflik berasal dari script tersebut.

Bulan April 1989, Brian Berliner merancang dan mengkodekan CVS. Jeff Polk kemudian membantu Brian dengan desain modul CVS dan dukungan cabang vendor (vendor branch support).

Anda dapat memperoleh CVS dalam beragam cara, termasuk mendownloadnya dari Internet

Untuk informasi lebih jauh tentang CVS ini, silakan kunjungi websitenya di :


Cara Setting Server CVS di Linux :

# apt-get install cvs
# mkdir /var/cvs
# cvs -d /var/cvs init
# chown -R surya:surya /var/cvs
# chmod -R 770 /var/cvs
# cd /home/surya/project/projects/
# cvs -d /var/cvs import -m "PROJECT SOURCE" projects surya projectSource
# chown -R surya:surya /var/cvs \n# chmod -R 770 /var/cvs

Informasi diperoleh dari :
http://satriapermana.net/linux/ubuntu/create-a-cvs-repository
http://tedi.heriyanto.net/papers/intro-cvs.html


Rabu, 12 November 2008

Membangun SMS Gateway dengan Gammu

Ternyata membangun SMS gateway itu tidak sesulit yang kita bayangkan, )

ok langsung saja kita ramu bumbu-bumbu nya yang kita butuhkan adalah :

1. Niat dan keyakinan untuk pantang menyerah bila gagal

2. Doa (perlu gak sih?)

3. Sistem Operasi Linux ( saya menggunakan Knoppix 4.0.2 )

4. Gammu.tar.gz Dapat anda download di :

http://www.mwiacek.com/zips/gsm/gammu/gammu.tar.gz atau

# wget http://www.mwiacek.com/zips/gsm/gammu/gammu.tar.gz

5. Web Server (Jika anda sudah punya webserver, abaikan saja no 5 ini, kalau belum

terpaksa anda harus install dulu apache,myslq,php)

6. Handphone Nokia 3310 atau Siemens C35i, untuk support handphone lainnya silahkan

baca lagi http://www.mwiacek.com/gsm/soft/gammu.html

Gammu support dengan berbagai merek handphone kok lihat ini :
Gammu currently supports:
majority of Nokia phones from DCT3 generation with Nokia operating system - for example Nokia 3210, 3310, 3315, 3410, 5110, 5130, 6110,

6130, 6150, 6210, 7110, 8210
majority of Nokia phones from DCT4 generation with Nokia operating system - for example Nokia 3100, 3510, 3510i, 6220, 6230, 6310, 6310i,

6510, 6610, 7210, 8310
many AT devices - for example many Siemens, Sony Ericsson, Nokia, Alcatel models
Alcatel from BE5/BF5/BH4 generation - for example 501, 511, 512
some functions with OBEX and Symbian devices

7. Kabel Serial untuk handphone

Jika anda sudah berhasil mendonwload gammu.tar.gz, silahkan di extract
#tar xvfz gammu.tar.gz

Setelah anda extract secara otomatis anda akan mendapati folder gammu-1.05.00, sekarang masuklah ke folder tersebut

#cd gammu-1.05.00

Sebelum anda menginstall biasakan membaca README, INSTALL, etc.
#./configure
#make
Disini perlu anda perhatikan apakah ada yang error atau tidak jika ada error!, berarti library mysql anda masih kurang lengkap, biasanya

error yang ditemui adalah “lssl” sering tidak ditemukan ketika melakukan “make” atau database mysql tidak support dengan gammu-nya.
(Solusi-nya coba install ulang mysql-nya atau lengkapi library yang dibutuhkan)
#make shared
#make install
#make installshared

Selanjutnya anda perlu meng-upgrade “library”
# vi /etc/ld.so.conf
Tambahkan link library dengan mengetik /usr/local/lib pada file ld.so.conf, selanjutnya lakukan upgrade library dengan mengetik
#/sbin/ldconfig

Note : Jika anda tidak menemukan error apa2 sampai tahap ini berarti anda sudah berhasil mengintall Gammu SMS Gateway

Sekarang coba masuk lagi ke folder dimana anda meng-extract gammu.tar.gz dan copy-lah file yang ada pada folder

/docs/example/config/ disitu anda akan menemukan 3 buah file dengan nama gammurc, mysql.sql, smsdrc lalu file gammurc dan

smsdrc anda copy-kan ke folder /etc

#cp gammurc smsdrc /etc/

Selanjutnya cari editlah file tersebut seperti ini :

[gammu]
port = /dev/ttyS0 #Jika anda memakai COM2 ganti dengan ttyS1
#model = 6110 #model handphone-nya anda abaikan saja, karena kalau diaktifin sering timbul masalah
connection = fbus #Kalau anda pakai hp Nokia connection-nya “fbus” jika anda memakai hp Siemens ganti “fbus” menjadi “at19200″
#synchronizetime = yes
#logfile = gammulog
#logformat = textall
#use_locking = yes
#gammuloc = locfile
#startinfo = yes
#gammucoding = utf8
#rsslevel = teststable #usephonedb = yes

Jika anda masih bingung, didalam file gammurc tersebut sudah ada petunjuk pemakaian lihat bagian bawah-nya.

Sekarang pastikan kabel data dan handphone anda sudah tersambung ke port COM1 pada komputer anda, selanjutnya anda tinggal ketik

#gammu –identify

Saya harap anda dapat melihat keluaran seperti dibawah ini :

Manufacturer : Nokia
Model : 3310 (NHM-5)
Firmware : 06.33 F (28-11-03)
Hardware : 1012
IMEI : 350835608671298
Original IMEI : 350835608671298
Manufactured : 0802
Product code : 0505201
Simlock 1 : MCC+MNC 00101, opened, user , counter 0
Simlock 2 : GID1 0000, opened, factory, counter 0
Simlock 3 : GID2 0000, opened, factory, counter 0
Simlock 4 : MSIN 0000000001, opened, factory, counter 0
MSID : 830d50880846870ebedd126096
MCU checksum : 9C79
DSP ROM : 6

Jika sudah ada koneksi seperti diatas berarti gammu sudah bisa mengenali handphone anda dan kita sudah bisa melanjutkan ke step yang

lainnya.

Nah sekarang kita tinggal membuat, bagaimana semua sms yang masuk lansung tersimpan ke database mysql dan dapat ditampilkan ke

website dengan memakai php scripts.

Oke lanjut bro… kerjaan kita sudah hampir selesai, mungkin ada kopi atau rokok yang bisa disruputt dulu hehe…??

Sekarang coba anda buka file smsdrc yang telah anda copy-kan ke folder /etc tadi

#vi /etc/smsdrc
bagian dibawah ini biarkan saja apa adanya
[smsd]
PIN = 1234
logfile = smsdlog
commtimeout = 1
sendtimeout = 10

carilah dan edit bagian dibawah ini sesuai dengan keadaan mysql anda

# ————————- SETTINGS FOR –smsd MYSQL —————————
user = root
password = password_mysql_anda
pc = localhost
database = nama_database

Note : Selain bagian yang saya sebutkan diatas mohon anda kasih tanda “#” karena yang kita butuhkan disini hanya bagian seperti yang

saya sebutkan diatas saja, guna untuk koneksi ke database mysql-nya.

Sekarang anda masuk ke directory /docs/example/config/ terdapat file ‘mysql.sql’ , yang adalah structure table yang digunakan, anda

tinggal memasukkannya di MySQL database anda.

Buat database sms
#mysqladmin –u root –p create sms

Buat table gammu dari file ‘mysql.sql’
#mysql –u root –p <>

Atau dengan cara yang lebih mudah, anda dapat membuat database dan membuat table gammu melalui phpmyadmin

http://localhost/phpmyadmin

Setelah selesai anda sudah bisa menjalankan daemon smsd-nya
#gammu –smsd MYSQL /etc/smsdrc
Log filename is “smsdlog”
Press Ctrl+C to stop the program …

Jika keluar seperti yang diatas berarti SMS Gateway anda sudah berjalan dengan baik dan anda bisa menggunakan sesuai kebutuhan anda,

dan semua sms yang ada di handphone anda akan lansung masuk kedalam database mysql.

Untuk tahap selanjutnya anda tinggal menampilkan sms anda ke web menggunakan php scripts, php scripts-nya bisa anda download di
http://www.geocities.com/ramdan1782/tcl/sms.zip

Anda perlu sedikit mengedit sms.php-nya sesuai dengan keadaan server database anda.

Sekarang anda bisa membuka sms lewat browser kesayangan anda dengan mengetik http://localhost/sms.php Nah sekarang apa yang harus anda lakukan?? yang perlu anda lakukan adalah menjalan service daemon smsd secara otomatis ketika
komputer di restart.

Buatlah file dengan nama gammu.sh dan simpanlah dalam direktori /usr/local/bin/
#cd /usr/local/bin/
#vi gammu.sh

Isinya sebagai berikut :

#!/bin/sh
export LANG=da_DK
/usr/local/bin/gammu –smsd MYSQL /etc/smsdrc

Setelah itu editlah file /etc/inittab anda
#vi /etc/inittab

Tambahkan baris dibawah ini pada inittab anda

GA:345:respawn:/usr/local/bin/gammu.sh

Wah… cukup panjang juga, hmmm mudah-mudahan tidak ada masalah ya… sekarang habiskan kopi anda, sampai disini anda sudah

selesai membangun SMS Gateway menggunakan Gammu.


Senin, 03 November 2008

SETTING WVDIAL untuk 2280 dan USB modem elite (VENUS T-10)

cara otomatis dengan hapus file /etc/wvdial.conf kemudian ketik perintah wvdialconf lalu edit /etc/wvdial.conf
kemudian ditambahakan pada baris terakhir stupid mode = 1.
or gunakan baris ini pada wvdial.conf


[Dialer Defaults]
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = USB Modem
Phone = #777
ISDN = 0
Username = telkomnet@flexi
Init1 = ATZ
Password = telkom
Modem = /dev/ttyACM0
Baud = 460800

[Dialer starone]
Phone = #777
Username = starone
Password = indosat
New PPPD = yes
Modem = /dev/ttyUSB0
Baud = 230400
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Init3 = AT+crm=1
Init4 = AT+cso=33
ISDN = 0
Modem Type = Analog Modem
ISDN = 0
Auto DNS = 1
Stupid Mode = 1


[Dialer flexi]
Phone = #777
Username = telkomnet@flexi
Password = telkom
New PPPD = yes
Modem = /dev/ttyUSB0
Baud = 230400
Init1 = ATZ
Init2 = AT+crm=1
ISDN = 0
Modem Type = Analog Modem
Auto DNS = 1
Stupid Mode = 1
ISDN = 0

[Dialer eliteFlexi]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = USB Modem
Phone = #777
ISDN = 0
Username = telkomnet@flexi
Password = telkom
Modem = /dev/ttyACM0
Baud = 460800
Stupid Mode = 1

[Dialer eliteStarone]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = USB Modem
Phone = #777
ISDN = 0
Username = starone
Password = indosat
Modem = /dev/ttyACM0
Baud = 460800
Stupid Mode = 1


Rabu, 29 Oktober 2008

Koneksi Internet menggunakan KPPP

Setelah semalaman mengatur koneksi internet di komputer saya yang sebelumnya menggunakan WVDIAL dan mecoba menggunakan KPPP, akhirnya jalan juga.

Saya memakai CDMA dengan ISP Indosat Starone dan kabel data CA-42. Awalnya untuk koneksi saya memcoba memakai software standar yang disediakan debian, yaitu wvdial. Akhirnya saya mencoba pakai KPPP dan, wuzzz, lancar.

Yang perlu diingat oleh pemakai KPPP, tidak usah repot2 mengatur modem pada /dev/modem, konfigurasi langsung dari KPPP saja. Tapi jangan lupa dites dulu apakah modem telah tersambung atau belum. Dan jangan lupa untuk mengatur inisialisasi. Beikut langkah2 yang saya tempuh ketika melakukan setting koneksi dialup:

  • Koneksikan kabel data ke port USB yang tersedia
  • Jalankan KPPP kemudian tekan tombol Configure pada dialog KPPP.
  • Setelah muncul dialog KPPP Configuration, pilih Tab Modems, kemudian tekan New… untuk membuat modem
  • Pada dialog New Modem, isikan nama modem sesuai yang disukai
  • Masih di dialog New Modem kemudian pilih tab modem kemudian coba tekan Query Modem untuk mengetahui koneksi modem. Jika berhasil akan keluar jenis modem yang terkoneksi
  • Tekan Modem Commands… untuk mengatur inisialisasi
  • Isi bagian Initialization String 1 dengan AT+crm=1
  • Isi Initialization String 2 dengan AT+cso=33, kemudian tekan ENTER
  • Tekan OK untuk kembali ke dialog KPPP Configuration
  • Untuk membuat account, pilih tab Accounts. Tekan New… kemudian pilih Manual Setup
  • Beri nama koneksi dengan mengisi bagian Connection name:
  • Isi no dialup dengan menekan tombol Add. Isi dengan no dialup (#777 untuk pelanggan Starone)
  • Pilih PAP/CHAP untuk Authentication
  • Pilin None untuk Callback Type
  • Tekan OK setelah selesai

Koneksi siap untuk digunakan. Selamat mencoba.

Kalo ada yang butuh kabel data CA-42 + Charge saya ada dengan harga

Rp.90.000,-



Minggu, 26 Oktober 2008

Setting modem Nokia lewat Linux

Flexi CDMA Nokia 2280 + non-asli kabel data CA-42 yang dibuat di Cina.

1). Pertama konfirmasi jika Anda telah p12303 driver tersedia di kernel (di Debian sudah tersedia) juga memeriksa apakah wvdial driver tersedia.

2). #demsg

salah satunya akan keluar tulisan seperti di bawah ini

pl2303 2-2:1.0: pl2303 converter detected
usb 2-2: pl2303 converter now attached to ttyUSB0

3). edit file wvdial.conf di /etc dengan perintah #gedit / etc / wvdial.conf


[Dialer Defaults]
Phone = #777
Username = starone
Password = indosat
New PPPD = yes
Modem = /dev/ttyUSB0
Baud = 230400
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Init3 = AT+crm=1
Init4 = AT+cso=33
ISDN = 0
Modem Type = Analog Modem
ISDN = 0
Auto DNS = 1
Stupid Mode = 1




[Dialer starone]
Phone = #777
Username = starone
Password = indosat
New PPPD = yes
Modem = /dev/ttyUSB0
Baud = 230400
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Init3 = AT+crm=1
Init4 = AT+cso=33
ISDN = 0
Modem Type = Analog Modem
ISDN = 0
Auto DNS = 1
Stupid Mode = 1


[Dialer flexi]
Phone = #777
Username = telkomnet@flexi
Password = telkom
New PPPD = yes
Modem = /dev/ttyUSB0
Baud = 230400
Init1 = ATZ
Init2 = AT+crm=1
ISDN = 0
Modem Type = Analog Modem
Auto DNS = 1
Stupid Mode = 1
ISDN = 0

4). esekusi file berikut (harus sebagai root)

untuk flexi : #wvdial flexi

untuk flexi : #wvdial starone

jika sukses akan keluar :

--> WvDial: Internet dialer version 1.56
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2
ATQ0 V1 E1 S0=0 &C1 &D2
OK
--> Sending: AT+crm=1
AT+crm=1
OK
--> Sending: AT+cso=33
AT+cso=33
OK
--> Modem initialized.
--> Sending: ATDT#777
--> Waiting for carrier.
ATDT#777
CONNECT
~[7f]}#@!}!}!} }3}"}&} } } } }#}%B#}%}'}"}(}"W}0~
--> Carrier detected. Starting PPP immediately.
--> Starting pppd at Tue Oct 28 22:07:53 2008
--> Pid of pppd: 19839
--> Using interface ppp0
--> pppd: �[10][06][08]@[1c][06][08]
--> pppd: �[10][06][08]@[1c][06][08]
--> pppd: �[10][06][08]@[1c][06][08]
--> pppd: �[10][06][08]@[1c][06][08]
--> pppd: �[10][06][08]@[1c][06][08]
--> pppd: �[10][06][08]@[1c][06][08]
--> local IP address 10.245.136.91
--> pppd: �[10][06][08]@[1c][06][08]
--> remote IP address 10.64.64.64
--> pppd: �[10][06][08]@[1c][06][08]
--> primary DNS address 202.152.165.36
--> pppd: �[10][06][08]@[1c][06][08]
--> secondary DNS address 202.93.40.174
--> pppd: �[10][06][08]@[1c][06][08]

nah sekarang kamu bisa menggunakan CDMA Phone sebagai modem

5). untuk disconect gunakan crtl + C

Caught signal #2! Attempting to exit gracefully…
–> Terminating on signal 15
–> Connect time 0.0 minutes.
–> Disconnecting at Mon Oct 31 05:19:23 2005

Kalo ada yang butuh kabel data CA-42 + Charge saya ada dengan harga

Rp.90.000,-


selamat mencoba

surya




Rabu, 10 September 2008

Automatic Backup Script for Postgresql Database

Postgresql (http://www.postgresql.org) is one of the truly Open Source, with features more or less compares to commercial product. This article will guide you through the making of automatic backup script for postgresql server, daily, weekly, monthly, compressed, and rotated.

Copy this script into a new file, such as autopgsqlbakup.sh, and chmod the file 755. Put it into /usr/local/bin.

Make an entry in /etc/crontab for automatically run this script, in particular time, such as:
00 12 * * * root autopgsqlbakup.sh
(it means, do backup at every 12 hour).

This is the script:


# Features:

# - Automatic backup of Postgresql database

# - Daily, weekly, monthly

# - Rotation of backup files


# Credits:

# This program is based on automatic MySQL backup script by Harley

# (wipe_out at users.sourceforge.net). Thanks Harley, your script is really nice.

# So, therefore, this program is also released under the GPL which can be obtain

# from http://www.fsf.org


# A little background:

# This program is emerged from the need to have an automatic backup process for

# postgresql database server. After some extensive searching on Google, I came

# across Harley's script. It's for MySQL though. Well, I'm not a bash scriptter,

# so, after some discussion in few lists and experimenting, I managed to get this

# works.


# Note on postgresql settings:

# By default, postgresql setting is not open, which means we must set the authentication

# method for the client first. It is done in /var/lib/pgsql/data/pg_hba.conf file.

# In order to use this program, we can set the method like this:

# host all all 192.168.1.100/32 md5

# where 192.168.1.100 is your backup machine IP.

# There is also one trick in order to be able to do automatic backup.

# Postgresql use it's build-in tools to backup, that is: pg_dump and pg_dumpall.

# Because of it's security measure, we cannot specify the password in the pg_dump option.

# There is a way though, we can create a file called .pgpass in user directory who runs

# this script, with this content:

# dbhost:5432:dbname:username:password, (dbhost is your porstgresql server's IP, so in this program,

# the .pgpass would look like this: 192.168.1.200:5432:dbname:username:password

# Don't forget to chmod the file 600.


# Terjemahan Indonesia:

# Kredit:

# Program ini dibuat berdasarkan script backup MySQL otomatis dari Harley

# (wipe_out at users.sourceforge.net). Terima kasih Harley, script kamu benar2 sip.

# Oleh karena itu, program ini dirilis juga dibawah lisensi GPL yang dapat kita

# peroleh dari http://www.fsf.org


# Sedikit latar belakang:

# Program ini berawal dari kebutuhan akan proses backup otomatis untuk database server

# Postgresql. Setelah mencari2 di Google, ketemulah script Harley itu, namun diperuntukkan

# bagi database MySQL. Yah, saya bukan seorang programming bash script, jadinya setelah

# bertanya2 di milis dan beberapa eksperimen, akhirnya jadi juga program ini.


# Catatan untuk setting postgresql:

# Secara default, settingan postgresql adalah tertutup, dalam arti kita mesti menyetel

# metode otentifikasinya terlebih dahulu sebelum dapat digunakan. Kita menyetelnya di file

# /var/lib/pgsql/data/pg_hba.conf. Untuk menggunakan program ini, kita dapat menyetelnya seperti ini:

# host all all 192.168.1.100/32 md5

# Dimana 192.168.1.100 itu adalah IP tempat kita melakukan backup.

# Ada pula satu buah trick agar kita dapat melakukan backup otomatis di postgresql.

# Postgresql menggunakan utility build-innya untuk melakukan backup yaitu pg_dump dan pg_dumpall.

# Karena tingkat securitynya yang tinggi, kita tidak dapat menyebutkan password postgresql di dalam

# option pg_dump. Beruntungnya, postgresql telah menyediakan mekanisme password ini melalui file

# bername .pgpass. Isi dari file ini adalah: dbhost:5432:dbname:username:password (dbhost adalah

# IP dari server postgresql kita. Jadi, sehubungan dengan program ini, file .pgpass ini akan berisi:

# 192.168.1.200:5432:dbname:username:password

# Jangan lupa untuk me-chmod file ini 600.



###############################

# START SCRIPT - MULAI SCRIPT #

###############################


#!/bin/bash

USERNAME=usernamekamu # username for the connection. username utk koneksinya

DBHOST=192.168.1.200 # match your pgsql server IP. sesuaikan dengan IP server pgsql kamu

DBNAMES=namadatabase # the database name. nama databasenya

BACKUPDIR="/home/backup" # the location to put the backup files. tempat backup files

MAILCONTENT="stdout"

MAILADDR=" me@ohmymy.comThis e-mail address is being protected from spam bots, you need JavaScript enabled to view it "

COMP=gzip


OPT="all"

# What do we want to backup.

# Apa yg mau di backup:

# "all" = schema + data

# "schema" = schema

# "data" = data


SEPDIR="yes"


DOWEEKLY=6

# On what day we want the weekly backup to be done. 1 = Monday

# Pada hari apa kita ingin backup mingguan dilakukan, 1 = Senin



DATE=`date +%Y-%m-%d_%Hh%Mm` # Datestamp misalnya 2006-03-21

DOW=`date +%A` # Day of the week, misalnya Sunday

DNOW=`date +%u` # Day number of the week, misalnya Senin = 1

DOM=`date +%d` # Date of the month, misalnya 27

M=`date +%B` # Bulan, misalnya January

W=`date +%V` # Week number, misalnya minggu ke-37


LOGFILE=$BACKUPDIR/$DBHOST-`date +%N`.log # Nama logfilenya

LOGERR=$BACKUPDIR/ERRORS_$DBHOST-`date +%N`.log # Nama logfile utk error


BACKUPFILES=""


OPT=""


# Create necessary directory

# Create direktori yang diperlukan

if [ ! -e "$BACKUPDIR" ]

then

mkdir -p "$BACKUPDIR"

fi


if [ ! -e "$BACKUPDIR/daily" ] # Check if Daily Directory exists.

then

mkdir -p "$BACKUPDIR/daily"

fi



if [ ! -e "$BACKUPDIR/weekly" ] # Check if Weekly Directory exists.

then

mkdir -p "$BACKUPDIR/weekly"

fi



if [ ! -e "$BACKUPDIR/monthly" ] # Check if Monthly Directory exists.

then

mkdir -p "$BACKUPDIR/monthly"

fi


# Make logfile

# Membuat logfile

touch $LOGFILE

exec 6>&1

exec > $LOGFILE # Link file descriptor #6 with stdout.

# Saves stdout.

touch $LOGERR

exec 7>&2 # Link file descriptor #7 with stderr.

# Saves stderr.

exec 2> $LOGERR # stderr replaced with file $LOGERR.


if [ "$OPT" = "all" ]; then

OPT = ""

elif [ "OPT" = "data" ]; then

OPT = "-a"

elif [ "OPT" = "schema" ]; then

OPT = "-s"

fi





# Database dump function

dbdump () {

pg_dump -O $OPT -U $USERNAME -h $DBHOST -d $1 > $2

return 0

}


# Compression function plus latest copy

SUFFIX=""

compression () {

if [ "$COMP" = "gzip" ]; then

gzip -f "$1"

echo

echo Backup Information for "$1"

gzip -l "$1.gz"

SUFFIX=".gz"

elif [ "$COMP" = "bzip2" ]; then

echo Compression information for "$1.bz2"

bzip2 -f -v $1 2>&1

SUFFIX=".bz2"

else

echo "No compression option set, check advanced settings"

fi

return 0

}


# Hostname for LOG information

if [ "$DBHOST" = "localhost" ]; then

HOST=`hostname`

if [ "$SOCKET" ]; then

OPT="$OPT --socket=$SOCKET"

fi

else

HOST=$DBHOST

fi



# Test is seperate DB backups are required

if [ "$SEPDIR" = "yes" ]; then

echo Backup Start Time `date`

echo ======================================================================

# Monthly Full Backup of all Databases

if [ $DOM = "01" ]; then

for MDB in $MDBNAMES

do



# Prepare $DB for using

MDB="`echo $MDB | sed 's/%/ /g'`"


if [ ! -e "$BACKUPDIR/monthly/$MDB" ] # Check Monthly DB Directory exists.

then

mkdir -p "$BACKUPDIR/monthly/$MDB"

fi

echo Monthly Backup of $MDB...

dbdump "$MDB" "$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql"

compression "$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql"

BACKUPFILES="$BACKUPFILES $BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql$SUFFIX"

echo ----------------------------------------------------------------------

done

fi


for DB in $DBNAMES

do

# Prepare $DB for using

DB="`echo $DB | sed 's/%/ /g'`"



# Create Seperate directory for each DB

if [ ! -e "$BACKUPDIR/daily/$DB" ] # Check Daily DB Directory exists.

then

mkdir -p "$BACKUPDIR/daily/$DB"

fi



if [ ! -e "$BACKUPDIR/weekly/$DB" ] # Check Weekly DB Directory exists.

then

mkdir -p "$BACKUPDIR/weekly/$DB"

fi



# Weekly Backup

if [ $DNOW = $DOWEEKLY ]; then

echo Weekly Backup of Database \( $DB \)

echo Rotating 5 weeks Backups...

if [ "$W" -le 05 ];then

REMW=`expr 48 + $W`

elif [ "$W" -lt 15 ];then

REMW=0`expr $W - 5`

else

REMW=`expr $W - 5`

fi

eval rm -fv "$BACKUPDIR/weekly/$DB_week.$REMW.*"

echo

dbdump "$DB" "$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql"

compression "$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql"

BACKUPFILES="$BACKUPFILES $BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql$SUFFIX"

echo ----------------------------------------------------------------------



# Daily Backup

else

echo Daily Backup of Database \( $DB \)

echo Rotating last weeks Backup...

eval rm -fv "$BACKUPDIR/daily/$DB/*.$DOW.sql.*"

echo

dbdump "$DB" "$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql"

compression "$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql"

BACKUPFILES="$BACKUPFILES $BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql$SUFFIX"

echo ----------------------------------------------------------------------

fi

done

echo Backup End `date`

echo ======================================================================


echo Total disk space used for backup storage..

echo Size - Location

echo `du -hs "$BACKUPDIR"`

echo



#Clean up IO redirection

exec 1>&6 6>&- # Restore stdout and close file descriptor #6.

exec 1>&7 7>&- # Restore stdout and close file descriptor #7.


if [ "$MAILCONTENT" = "files" ]

then

if [ -s "$LOGERR" ]

then

# Include error log if is larger than zero.

BACKUPFILES="$BACKUPFILES $LOGERR"

ERRORNOTE="WARNING: Error Reported - "

fi

#Get backup size

ATTSIZE=`du -c $BACKUPFILES | grep "[[:digit:][:space:]]total$" |sed s/\s*total//`

if [ $MAXATTSIZE -ge $ATTSIZE ]

then

BACKUPFILES=`echo "$BACKUPFILES" | sed -e "s# # -a #g"` #enable multiple attachments

mutt -s "$ERRORNOTE MySQL Backup Log and SQL Files for $HOST - $DATE" $BACKUPFILES $MAILADDR < $LOGFILE #send via mutt

else

cat "$LOGFILE" | mail -s "WARNING! - MySQL Backup exceeds set maximum attachment size on $HOST - $DATE" $MAILADDR

fi

elif [ "$MAILCONTENT" = "log" ]

then

cat "$LOGFILE" | mail -s "MySQL Backup Log for $HOST - $DATE" $MAILADDR

if [ -s "$LOGERR" ]

then

cat "$LOGERR" | mail -s "ERRORS REPORTED: MySQL Backup error Log for $HOST - $DATE" $MAILADDR

fi

elif [ "$MAILCONTENT" = "quiet" ]

then

if [ -s "$LOGERR" ]

then

cat "$LOGERR" | mail -s "ERRORS REPORTED: MySQL Backup error Log for $HOST - $DATE" $MAILADDR

cat "$LOGFILE" | mail -s "MySQL Backup Log for $HOST - $DATE" $MAILADDR

fi

else

if [ -s "$LOGERR" ]

then

cat "$LOGFILE"

echo

echo "###### WARNING ######"

echo "Errors reported during AutoMySQLBackup execution.. Backup failed"

echo "Error log below.."

cat "$LOGERR"

else

cat "$LOGFILE"

fi

fi


if [ -s "$LOGERR" ]

then

STATUS=1

else

STATUS=0

fi

fi


# Clean up Logfile

eval rm -f "$LOGFILE"

eval rm -f "$LOGERR"


exit $STATUS


# Well, I'm not a bash scriptter, so I'm sure there must be a much better way to do it, even I'm also quite sure

# that this program has some bug to be found. So, any suggestion is most welcome. Please contact me

# at: fajarpri at arinet dot org, and pls do stop by my website at http://linux2.arinet.org. Thanks.


# Saya bukan programmer bash script, dan karenanya saya yakin banget ada cara yang jauh lebih baik di dalam

# mencapai apa yang diinginkan oleh program ini, dan juga pasti ada beberapa bug di dalam program ini. Oleh karena

# itu, semua saran/koreksi sangat diharapkan. Saya dapat dihubungi melalui email fajarpri at arinet dot org, dan

# website http://linux2.arinet.org


# Knowledge belongs to everyone.


# Version

# 0.1 -- 13 March 2006 -- Initial release



Ketika selesai backup, akan terlihat ini:
Backup Start Time Mon Mar 13 15:17:26 WIT 2006
======================================================================
Daily Backup of Database ( contohdatabase )
Rotating last weeks Backup...
removed `/home/fajar/sore/daily/contohdatabase/contohdatabase_2006-03-13_15h10m.Monday.sql.gz'


Backup Information for /home/fajar/sore/daily/contohdatabase/contohdatabase_2006-03-13_15h17m.Monday.sql
compressed uncompressed ratio uncompressed_name
9124876 66687046 86.3% /home/fajar/sore/daily/contohdatabase/contohdatabase_2006-03-13_15h17m.Monday.sql
----------------------------------------------------------------------
Backup End Mon Mar 13 15:17:45 WIT 2006
======================================================================
Total disk space used for backup storage..
Size - Location
8.8M /home/fajar/sore

This article can also be dowloaded from the download menu.

download file disini

Goodluck :)

Imagev.0.1 by ari_stress a.k.a tiger74 a.k.a Fajar Priyanto

Bukit Sentul, 13 March 2006. Email: fajarpri at arinet dot org

He is a Microsoft Certified Professional who falls in love with Linux. Working at an automotive dealer in Jakarta


Senin, 28 Juli 2008

PostgreSQL

PostgreSQL adalah oper source relation database system yang sangat powerful. PostGreSQL sudah lebih dari 15 tahun aktif dalam pengembangannya dan arsitektur yang dibangunnyapun memiliki reputasi yang bagus, handal, lengkap, dan akurat. PostGreSQL dapat berjalan di semua sistem operasi yang ada, termasuk Linux, Unix (AIX, BSd, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64), dan windows. PostGreSQL mendukung penuh foreign keys, joins, views, triggers, dan stored procedures. PostgreSQL memiliki hampir semua data type SQL92 dan SQL99, termasuk integer, numeric, boolean, char, varchar, data, interval, dan timestamp. PostGreSQL juga memiliki kemampuan menyimpan objek binary yang cukup besar, termasuk gambar, suara, dan video. Selain itu postgre memiliki native programming interface untuk C/C++, Java, Perl, Python, Ruby, Tcl, ODBC, dll.

PostgreSQL membanggakan fitur-fiturnya yang mutakhir, contohnya Multi-Version Concurrency Control (MVCC), point in time recovery, tablespaces, asynchronous replication, nested transactions (savepoints), online/hot backups, a sophisticated query planner/optimizer, dan write ahead logging for fault tolerance. Postgre juga mendukung international character sets, multibyte character encodings, Unicode, and locale-aware for sorting, case-sensitivity, and formatting. Selain itu, PostGreSQL dapat diukur baik kualitas datanya maupun jumlah concurent user yang dapat ditangani. Ada beberapa sistem Postgre yang aktif dalam lingkuangan produksi yang memanage data sebesar 4 terabytes.

Limit

Value

Maximum Database Size

Unlimited

Maximum Table Size

32 TB

Maximum Row Size

1.6 TB

Maximum Field Size

1 GB

Maximum Rows per Table

Unlimited

Maximum Columns per Table

250 - 1600 depending on column types

Maximum Indexes per Table

Unlimited

PostgreSQL telah mendapatkan pujian dari para penggunanya serta pengakuan dari dunia industri, termasuk Linux New Media Award for Best Database System dan tiga kali memenangkan The Linux Journal Editors' Choice Award for best DBMS.

Fitur

PostgreSQL memiliki standart-standart yang harus dipenuhi. Implementasi SQL berdasarkan standar ANSI-SQL 92/99. Postgre support untuk subqueries (including subselects in the FROM clause), read-committed and serializable transaction isolation levels. Selain memiliki fully relational system catalog yang mensupport multiple skema per database, catalog juga dapat diakses melalui Information Schema seperti pada standar SQL.

Data integrity meliputi include (compound) primary keys, foreign keys with restricting and cascading updates/deletes, check constraints, unique constraints, dan bukan null constraints.

Postgre memiliki host extension dan advance fitur.

  • GiST (Generalized Search Tree) indexing adalah advance sistem yang membawa array dalam jumalah besar dengan sorting dan searching argoritma yang berbeda termasuk B-tree, B+-tree, R-tree, partial sum trees, ranked B+-trees dan masih banyak lagi.
  • GiST menyediakan pondasi untuk banyak public project yang menggunakan POstGreSQl seperti OpenFTS dan POstGIS. OpenFTS (Open Source Full Text Search engine) menyediakan indexing data secara online dan relevansi rangking untuk satavase searching. PosGIS adalah project yang support untuk geografik objek di PostGreSQL, memungkinkan untuk digunakan sebagai spatial database untuk geographic information systems (GIS).
  • Fitur lainnya adalah table inheritance, a rules systems, and database events.
  • Table inheritance object oriented slant on table creation,allowing database designers untuk membuat table baru dari table lain.
  • Peraturan dalam sistem ini juga disebut query rewrite system, memperbolehkan designer membuat peraturan untuk operasi yang spesifik untuk tabel yang mereka buat dan juga secara dinamik mentransformasikan ke alternatif operasi yang lain saat mereka di proses.


Highly Customizable

PostgreSQL menyediakan prosedur penyimpanan di lebih dari satu lusin bahasa pemrograman, termasuk Java, Perl, Python, Ruby, Tcl, C/C++, and miliknya sendiri PL/pgSQL,yang mirip dengan oracle PL/SQL.

Trigger dan prosedur penyimpanan dapat ditulis dalam bahasa C dan di-load ke dalam database sebagai library, memungkinkan fleksibilitas yang tinggi dalam mengembangakan kemampuannya. PostgreSQL memiliki framework yg mengizinkan developers untuk mendefinisikan dan membuat custom data type mereka sendiri dengan fungsi dan operasi pendukung. Sebagai hasilnya, host of advanced data types telah banyak dibuat dengan range mulai dari geometric sampai spatial primitives juga network addresses bahkan ISBN/ISSN (International Standard Book Number/International Standard Serial Number) data types, semua ini secara opsional dapat ditambahkan ke dalam sistem ini.

Seperti halnya banyak procedure languages didukung oleh PostgreSQL, ada banyak library interface juga. Interface tersebut untuk Java (JDBC), ODBC, Perl, Python, Ruby, C, C++, PHP, Lisp, Scheme, dll.

Yang terbaik adalah, Source dari kode PostGreSQl ini tersedia secara open source. Ini membuat pengguna menjadi bebeas untuk menggunakan, memodifikasi. PostGreSQL tidak hanya dapat digunakan daam perusahaan tapi juga di tumah, web, komersial produk yang membutuhkan RDBMS.

INDEXING

Ketika kita mengakses tabel, PosgreSQL normalnya membaca dari awal ke akhir table, mencari untuk row yang relevan. Dengan sebuah index, maka akan dengan cepat untuk mencari nilai index tersebut, lalu langsung menemukan row yang tepat.

Misalnya, anggap query SELECT * FROM customer WHERE col = 43. Tanpa sebuah index, PostgreSQL harus mencari di seluruh tabel untuk mencari rows dimana col sama dengan 43. Dengan sebuah index pada col, PostgreSQL dapat langsung menuju ke baris dimana col sama dengan 43, melewati (bypass) rows yang lain.

Secara internal, PostgreSQL menyimpan data dalam operating system files. Masing-masing tabel mempunyai file-nya sendiri dan data rows disimpan dalam file tersebut. Sebuah index merupakan file terpisah yang diurutkan oleh satu atau lebih columns. Index tersebut mengandung pointer ke tabel file, mengizinkan akses yang cepat ke nilai tertentu pada tabel tersebut.

PostgreSQL tidak membuat index-index secara automatis, namun user yang harus untuk membuatnya.

Untuk membuat index, dapat menggunakan command CREATE INDEX, contohnya:



CREATE INDEX customer_custid_idx ON customer (customer_id);


Pada contoh diatas customer_custid_idx adalah nama index, customer adalah nama tabel yang diberi index dan customer_id adalah column yang diberi index. Index ini berguna hanya untuk mencari rows dalam tabel customer untuk column customer_id yang spesifik. Index ini tidak dapat digunakan untuk mencari pada columns yang lain, karena index-nya hanya diurutkan oleh column yang spesifik saja.

User-defined index juga dapat menggunakan built-in B-tree, hash dan GiST indexes. Indexing pada PostgreSQL juga men-support features berikut:

  • PostgreSQL dapat melakukan backward scanning indexes.
  • Expressional indexes dapat dibuat dimana index berupa hasil dari sebuah expresi atau fungsi.
  • Partial indexes, which only index part of a table, dapat dibuat dengan menambahkan WHERE clause ke akhir dari CREATE INDEX statement.

create index partial_salary on employee(age) where salary>2100;
 


Index partial_salary hanya diberikan pada rows yang mempunyai salary > 2100.

  • Pada versi 8.1, men-support bitmap index scans.


ADMINISTRATIVE TOOLS

Instalasi

Tahapan dibawah ini hanya untuk proses instalasi yang tidak menggunakan distribusi pre-packaged, seperti RPM (.rpm) atau Debian Package (.deb).

Requirements:

Software dibutuhkan untuk membangun PortgreeSQL pada Windows berbasis NT (Windows XP dan 2003), yaitu MinGW atau Cygwin. Untuk instalasi komplit, hanya 2 software tadi yang direkomendasikan, namun tidak menutup kemungkinan untuk hanya menginstall C client library (libpq) dan terminal interaktif (psql) dengan menggunakan tool lain.

Paket-paket berikut hanya tambahan. Tidak dibutuhkan untuk konfigurasi standart, namun dibutuhkan untuk beberapa tambahan lain. Antara lain:

  • PL/Perl server programming language.
  • PL/Phyton server programming language.
  • PL/Tcl procedural language.
  • Native language support.
  • Kerberos, OpenSSL, dan/atau PAM.
  • GNU Flex dan Bison.

Prosedur Instalasi:

1. Konfgurasi

2. Build

3. Regression Test

4. Instalasi File

Shared Library:

Pada kebanyakan sistem yang menggunakan shared library kita harus memberitahu sistem kita bagaimana mencari shared library yang baru saja diinstall. Beberapa system yang tidak perlu melakukan proses ini antara lain: Linux, NetBSD, OpenBSDm Tru64 UNIX, IRIX, HP-UX, FreeBSD, BSD/OS.


Konfigurasi Server

Ada banyak parameter konfigurasi yang mempengaruhi perilaku dari sistem database.

Parameter Setting

Semua nama parameter case-insensitive. Setiap parameter tipe data: Boolean, floating point, integer, atau string. Satu cara untuk mengkonfigurasi parameter-parameter tersebut yaitu dengan meng-edit file postgresql.conf, yang normalnya berada pada direktori data. Contoh dari isi file tersebut seperti ini:

# This is a comment

log_connections = yes

log_destination = ’syslog’

search_path = ’$user, public’

Satu parameter satu baris.

Koneksi dan Otentikasi

Setting Koneksi

listen_addresses (string)

Menentukan alamat IP dimana server yang akan dihubungkan oleh aplikasi klien. Nilai defaultnya yaitu localhost.

port (integer)

Port TCP dimana server mendengarkan; defaultnya 5432.

max_connections (integer)

Menentukan jumlah maksimum dari koneksi konkuren ke server database. Defaultnya 100, tapi mungkin kurang kalau konfigurasi kernel kita tidak mendukungnya.

superuser_reserved_connections (integer)

Menentukan jumlah slot koneksi yang disediakan untuk berhubungan dengan superuser PostgreSQL. Paling banyak koneksi sebanyak max_connection bisa aktif secara simultan.

unix_socket_directory (string)

Menetukan direktori dari socket Unix-domain yang mana server akan mendengarkan koneksi dari aplikasi klien.

unix_socket_group (string)

Mengeset grup kepemilikan socket Unix-domain. Defaultnya isinya adalah string kosong, yang menggunakan grup default untuk current user.

unix_socket_permissions (integer)

Mengeset izin akses ke socket Unix_domain. Socket Unix_domain menggunakan set izin standar sistem berkas Unix.

bonjour_name (string)

Menentukan nama broadcast Bonjour

tcp_keepalives_idle (integer)

Pada sistem yang mendukung TCP_KEEPIDLE. Menentukan berapa detik antara mengirim keepalives dan koneksi idle.

Memanage Database

Dalam membuat basis data, server PostgreSQL harus sudah dalam keadaan berjalan atau running. Basis data dibuat dengan menggunakan perintah SQL “CREATE DATABASE”.

CREATE DATABASE nama;

dimana nama mengikuti aturan standar untuk identifier SQL.

Kemudian, database pertama dibuat dengan menggunakan perintah initdb saat tempat penyimpanannya di inisialisasi. Database ini disebut postgres.

Untuk mudahnya ada program yang bisa dieksekusi dari shell untuk membuat database baru dapat digunakan perintahcreatedb.

createdb dbname

perintah tersebut melakukan koneksi ke postgres kemudian mengeluarkan perintah CREATE DATABASE seperti dijelaskan diatas.

Saat kita ingin membuatkan database untuk orang lain, dan orang tersebut yang akan menjadi pemilik database yang baru, sehingga dia dapat memanage databasenya sendiri, untuk hal ini dapat digunakan perintah:

CREATE DATABASE dbname OWNER rolename;

atau,

createdb -O rolename dbname

Kita harus sebagai superuser untuk membuat database untuk orang lain.

Template

CREATE DATABASE sebenarnya bisa dilakukan dengan mengkopi dari database yang sudah ada. Secara default, dia mengkopi dari database sistem standar bernama template1.

Untuk membuat database dari template1, gunakan peritah berikut

CREATE DATABASE dbname TEMPLATE template1;

dari the SQL environment, or

createdb -T template0 dbname

dari shell.

Menghancurkan Database

Database dapat dihancurkan dengan menggunakan perintah DROP DATABASE

DROP DATABASE nama;

Namun hanya pemilik database atau superuser yang bisa meng-drop database. Melakukan dropping mengapus semua objek yang terkandung didalamnya. Dan tidak bisa di undo. Kita tidak bisa meng-eksekusi DROP DATABASE saat terhubung ke database yang akan di drop.

Untuk mudahnya, ada juga program shell untuk men-drop database, dropdb:

dropdb dbname

Backup and Restore

Database PostgreSQL memiliki kemampuan untuk mem-backup secara teratur.

Ada tiga cara pendekatan untuk mem-backup data PostgreSQL:

  1. SQL Dump

Ide dari metode SQL dump adalah membentuk file text dengan perintah-perintah SQL yang pada saat dilempar kembali ke server, akan membentuk ulang database dengan state yang sama seperti pada saat di dump. PostgreeSQL menyediakan program utiliti pg_dump untuk ini. Cara dasar penggunaannya sbb:

pg_dump dbname > outfile

Seperti yang bisa kita lihat, pg_dump menulis hasilnya ke standar output. Kemudian hasil dari standar output tersebut akan di redirect kedalam outfile

pg_dump dbname > outfile

Namun perlu diingat, pg_dump tidak beroperasi dengan izin spesial. Untuk suatu hal tertentu, ia harus punya hak akses untuk membaca semua tabel yang ingin di backup, jadi pada prakteknya hampir selalu dilakukan sebagai superuser database.

Restoring the Dump

File text yang dibuat oleh pg_dump nantinya akan dibaca oleh program psql. Perintah umum untuk merestore dump adalah

psql dbname <>

dimana infile adalah file yang kita gunakan saat meridirect standar output pada saat membuat dump.

Database dbname tidak akan dibuat dengan perintah diatas, kita harus membuatnya sendiri bisa dari template0 atau template1 sebelum mengeksekusi psql.

Bisa juga melakukan dump terhadap database secara langsung dari satu server ke server lain

contohnya:

pg_dump -h host1 dbname | psql -h host2 dbname

Menggunakan pg-dumpall

Mekanisme diatas tidak cocok saat kita melakukan back up untuk seluruh database cluster, oleh karena itu disediakan program pg_dumpall. pg_dumpall mem-backup setiap database pada cluster yang diberikan, juga menyediakan cluster-wide data seperti sebagai user dan group. Cara penggunaan dasarnya sebagai berikut:

pg_dumpall > outfile

hasil dari dump bisa direstore dengan perintah psql:

psql -f infile postgres

b. File System Back up

Cara lainnya adalah dengan langsung melakukan pengandaan file yang digunakan PostgreSQL untuk menyimpan data di database. Kita bisa menggunakan cara apapun yang kita sukai untuk melakukan backup file biasa, sebagai contoh

tar -cf backup.tar /usr/local/pgsql/data

Ada dua batasan, juga, apa yang membuat metode ini kurang praktis atau kurang canggih dibandingkan dengan metode pg_dump :

1. Server database harus dimatikan untuk mendapatkan backup yang berguna. Cara setengah-setengah seperti menghalangi semua koneksi tidak akan berguna (karena tar dan tool semacamnya tidak mengambil atomic snapshot state dari filesystem pada waktu tertentu). Kita juga harus mematikan server sebelum melakukan restore.

2. Filesystem backup hanya berguna untuk restorasi komplit dari keseluruhan cluster database.

  1. Online Back up and Point in time recovery

PostgreSQL memaintain sebuah write ahead log (WAL) di subdirektori p_xlog direktori cluster data. Log tersebut menjelaskan setiap perubahan yang dibuat terhadap file data pada databases asalan utamanya adalah crash-safety Namun, log ini memungkinkan kita untuk menggunakan strategi ketiga untuk membackup database yaitu dengan menggabungkan antara file-system-level backup dengan backup dari file WAL. Kalau restorasi dibutuhkan, kita merestore backupnya kemudian kita melakukan “replay” dari file WAL untukmembawa backup ke waktu kini. Pendekatan ini lebih rumit untuk dilakukan dibanding pendekatan sebelumnya, tapi memiliki keuntungan yang cukup banyak, yaitu:

l Kita tidak butuh backup yang sempurna seperti awal, inkonsistensi internal pada backup akan dikoreksi oleh log replay. Jadi kita tidak butuh kemampuan snapshot file-system, hanya tar atau tool sejenisnya.

l Karena kita bisa menggabungkan sepanjang tak terhingga dari sequence file WAL, kontinuitas backup dapat diperoleh hanya dengan secara kontinyu mengarsipkan file WAL.

l Tidak ada yang mengatakan bahwa kita haru mereplay seluruh file WAL sampai akhir. Kita bisa memberhentikan replay pada point apapun dan memiliki snapshot yang konsisten dari database seperti pada saat itu.

l Kalau kita terus menerus secara kontinyu memberikan seri-seri file WAL ke mesin lain yang telah diisi dengan file back upnya, maka kita punya sebuah “hot standby” system: pada satu waktu kita bisa bawa mesin kedua tersebut dan kita punya database yang hampir mirip dengan aslinya.

Memonitor Aktifitas Database

Ada beberapa tool yang dapat digunakan untuk memonitor aktifitas database dan menganalisa performanya.

Unix Tool Standar

Ada regular Unix monitoring program seperti ps, top, iostat, dan vmstat.

Statistic Collector

PostgreSQL statistic collector merupakan subsistee yang mensupport pengumpulan dan pelaporan informasi mengenai aktifitas server. Saat ini, collector bisa menghitung akses ke tabel dan index-index pada kedua disk-block dan individual-row. Selain itu statistic collector ini menjelaskan perintah yang sedang dieksekusi oleh proses server lain.

Statistics Collection Configuration

Karena statistic collection menambahkan beberapa overhead untuk eksekusi query, system bisa dikonfigurasi untuk mengumpulkan atau tidaknya informasi. Hal ini dikontrol dengan configuration parameter yang normalnya di set di postgresql.conf.

Parameter stats_start_collector harus di set true agar statistic collector di jalankan seluruhnya. Ini merupakan konfigurasi default dan yang direkomedasikan, tapi boleh dimatikan kalau kita tidak tertarik akan hal ini.

Parameter stats_command_string, stats_block_level, dan stats_row_level mengontrol berapa banyak informasi yang sebenarnya dikirim ko collector dan menjelaskan berapa banyak run-time overhead yang terjadi. Normalnya, parameter tersebut di konfigurasi di postgresql.conf supaya berjalan untuk seluruh proses server, tapi bisa saja di matikan untuk sesi individu dengan perintah SET.

Viewing Collected Statistics

Saat menggunakan statistic untuk memonitor aktifitas sekarang, pentinglah untuk menyadari bahwa informasi tersebut tidak diupdate secara instan. Setiap proses server secara individual mentransmit block baru dan jumlah row access kepada collector sesaat sebelum idle; jadi transaksi yang sedang berjalan tidak mempengaruhi tampilan seluruhnya.

Hal penting lainnya yaitu saat proses server diminta untuk menampilkan statistic, dia pertama kali mengambil the most recent report yang dikeluarkan oleh proses collector dan kemudian menggunakan snapshot ini untuk semua statisticccal views dan fungsinya sampai pada akhirnya dari current transactionnya sendiri. Sehingga statistic yang tampil tidak akan berubah selama kita meneruskan current transaction. Hal ini mengizinkan kita melakukan beberapa query pada statistic dan mengkorelasikan hasilnya tanpa khawatir akan angka-angka yang berubah pada sistem.

Viewing Locks

Tool lain yang berguna untuk memonitor aktifitas database yaitu pg_locks sistem tabel. Dia mengizinkan DBA untuk melihat informasi mengenai outstanding locks pada lock manager.

PLATFORM

Pada umumnya, beberapa Unix-compatible platform yang modern seharusnya dapat menjalankan PostgreSQL. Platform-platform, yang telah menerima testing eksplisit pada saat dirilis, kemudian didaftar dalam instruksi-instruksi instalasi.

PostgreSQL juga dapat berjalan pada Microsoft Windows NT yang berbasis sistem operasi seperti Win2000, WinXP, dan Win2003. Selain itu, MSDOS yang berbasis versi-versi dari Windows (Win95, Win98, WinMe) juga dapat menjalankan PostgreSQL dengan menggunakan Cygwin.

Berikut adalah beberapa platform lainnya yang juga dapat menjalankan PostgreSQL:

  • Apple Computer, Inc.: Mac OS Any version
  • Cisco Systems, Inc.: Cisco IOS Any version
  • Conectiva: Conectiva Linux 10
  • Data General: DG/UX Any version
  • Hewlett-Packard Company: HP-UX Any version
  • Hewlett-Packard Company: Tru64 UNIX Any version
  • IBM: AIX Any version dan OS/2 Any version
  • Linux: Linux Any version
  • Microsoft Corporation: Windows 95
  • Microsoft Corporation: Windows 98
  • Microsoft Corporation: Windows 98 Second Edition
  • Microsoft Corporation: Windows Me
  • Microsoft Corporation: Windows 2000 Any version
  • Microsoft Corporation: Windows 2003 Any version
  • Microsoft Corporation: Windows NT 4.0
  • Microsoft Corporation: Windows XP Any version
  • Novell, Inc.: Novell NetWare Any version
  • PostgreSQL: PostgreSQL 7.x
  • PostgreSQL: PostgreSQL 8.x
  • Santa Cruz Operation, Inc.: SCO Unix Any version
  • SGI: IRIX Any version
  • Sun Microsystems: Solaris Any version
  • Wind River Systems, Inc.: BSD Any version

PRICE

PostgerSQL merupakan software yang open source.

SECURITY

Sekuriti dari basis data dibagi menjadi beberapa level:

  • Proteksi berkas basis data, yaitu semua berkas yang tersimpan di basis data terlindungi dari account manapun kecuali superuser account dari postgres
  • Komunikasi antara user dengan server basis data by default, dilakukan melalui local UNIX socket, bukan TCP/IP.
  • Koneksi user dapat diatur sehingga koneksi hanya bisa dari IP yang ditentukan saja
  • Setiap user di postgre mempunyai user name dan password. By default, user hanya dapat melihat tabel basis data yang dibuat oleh user tsb.
  • User dapat dimasukkan ke sebuah group sehingga akses tabel bisa dibatasi oleh anggota group tersebut.

Authentikasi

Adalah proses pengecekan oleh server apakah user yang mengakses suatu berkas basis data itu adalah user yang berhak atau tidak. User yang mengakses akan di cek ke kelas pg_user untuk memastikan bahwa yang mengakses itu adalah orang yang benar-benar yang punya basis data tersebut.

Postgre mengecek autentikasi dengan cara Host-based Access Control, yaitu user mana yang boleh mengakses sebuah basis data dan user tersebut harus mengautentikasi dirinya sendiri.

Postgre juga menyediakan keluasaan bagi user untuk menentukan siapa saja yang boleh mengakses basis data mereka melalui Access Control. Access Control ini membatasi siapa saja yang bisa mengakses dengan cara seperti memberikan superuser atau membatasi privileged yang didapat oleh seorang user (misalnya membatasi hanya boleh membaca, tidak boleh mengubah).

PostgreSQL mengauthentikasikan user dalam beberapa metode:

· Trust, koneksi user diizinkan tanpa syarat/pertimbangan

· Reject, koneksi user ditolak tanpa syarat/pertimbangan

· Crypt, client akan meminta password untuk mengauthentikasi user. Password dikirim dari client ke server dengan cara dienkripsi terlebih dahulu dengan crypt(3), lalu membandingkannya dengan password yang disimpan di dalam table pg_shadow, yaitu table yang memuat password para user. Jika cocok, maka koneksi diizinkan

· Password, client akan meminta password kepada user, lalu password ini akan dikirim langsung ke server dan dicocokkan dengan table pg_shadow. Jika passwordnya cocok, maka mungkin akan diminta mengirimkan berkas password untuk dicocokkan kemudian.

Semua metode di atas mensupport UNIX dan TCP/IP domain sockets.

Metode di bawah ini hanya untuk TCP/IP domain sockets:

· Krb4, kerberos v4

· Krb5, kerberos v5

  • Ident, ‘ident server’ pada client akan mengauthentikasi user (RFC 1413). Kemudian, user dapat memberikan ‘map name’ untuk dicocokkan kemudian ke user name yang tersimpan pada postgre server.

Selain itu, terdapat cara juga untuk melakukan ‘secure TCP/IP connection’, yaitu dengan cara menggunakan metode ssh untuk mengenkripsi koneksi jaringan antara client dengan postgre server. Caranya adalah:

  • Buatlah sebuah koneksi ke server dengan cara ‘tunnel’ seperti

Ø ssh –L 3333:server.domain.org:5432 postgres@server.org

  • angka pertama (3333) adalah port number dari tunnel yang berada di client. Angka kedua (5432) adalah remote end dari tunnel atau port postgre yang berada di server. Alamat server berada di antara kedua angka tersebut. Argumen terakhir adalah optional user name. User name ini bisa aja tidak berkaitan dengan postgre, asalkan diterima oleh server.
  • Setelah mempunyai sesi ssh, koneksikan postgre client dengan port yang merupakan tunnel daripada koneksi ssh sebelumnya.

Ø Psql –h localhost –p 3333 –d mpw

  • -h disini adalah untuk memberitahu bahwa socket yang digunakan adalah TCP/IP, bukan UNIX socket. Kita dapat juga menghilangkan –p jika port tunnel yang digunakan adalah 5432

PERFORMANCE

PostgreSQL terlihat telah menampilkan performa yang sangat baik. Pada beberapa tahun belakangan ini, PostgreSQL telah mengalami peningkatan yang pesat dan mempunyai fitur-fitur yang menarik, seperti partial locking yang lebih baik daripada row level locking. Peningkatan performa seperti ini tidak terlihat jika kita hanya memasukkan 100.000 baris data, namun akan terlihat jelas pada situasi querying yang kompleks.

Setiap ahli database mengetahui bahwa sangat sulit dan subjektif untuk membandingkan RDBMS’s. Namun, untuk mengetahui kualitas performa dari PostgreSQL, kita akan membandingkan PostgreSQL dengan database sebelumnya, yaitu dengan melakukan test setup.

The test servers

PostgreSQL 7.3.2 pada Pentium4 2.2 GHz/512MB/SCSI, RedHat linux 9

Larry 8i pada Pentium yang sama, Pentium4 2.2 GHz/512MB/SCSI, Win2000 Adv.

Server 100MB LAN, 2.4 GHz client workstation

Pelu diperhatikan bahwa PostgreSQL dikonfigurasikan untuk menggunakan banyak shared memory daripada umumnya, karena pengaturan umumnya sangat konservatif dan hal ini merusak performa dari database. Namun, memori yang digunakan oleh PostgreSQL di dalam tes secara signifikan lebih sedikit daripada memori yang digunakan Larry.

The databases

Database di-­setup dengan data dan skema database yang paling baru dari sebuah produksi database. Database tersebut menggunakan 48 tabel, dengan 179 index, 77 foreign keys, 30 sequences dan triggers, serta 138 views. Total dari 200.000 lebih rekaman dimasukkan ke dalam tabel dengan ukuran yang berbeda.

Real life simulation

Queries yang dikirim ke database di-l­og dari aplikasi regular klien selama sesi typical. Queries tersebut cocok untuk kedua database. Log tersebut dimodifikasi untuk merefleksikan user-logins yang berbeda dan digunakan sebagai input untuk sesi simulasi pada test setup. Queries yang digunakan mempunyai karakteristik sebagai berikut. Queries mempunyai sekitar 80 queries, dengan 10% entri/update/hapus, 74 (sub)selects, 46 menggunakan views yang kompleks (cascaded). Hasilnya pada pengembalian 2000 rekaman per-sesi. Kebiasaan membuat software klien berjalan 200 sesi dari 6 pengguna yang konkuren, dimulai dengan penundaan startup untuk meningkatkan querying yang asinkronus. Sesi klien yang sebenarnya adalah sekitar 10 menit, sesi simulasi 4 detik. Tes software untuk mensimulasikan sesi-sesi menggunakan pustaka vendor’s driver asal, bukan ODBC. Untuk setiap database, sejumlah 24.000.000 rekaman dikembalikan sebagai hasil dari 1200 sesi ­klien yang disimulasikan. Database dan queries mungkin tidak benar-benar kompleks, namun banyak fitur yang digunakan, dan itu merupakan sistem yang hidup dan matang, dengan sedikit redudansi dan integritas yang baik, digunakan oleh banyak pelanggan. Kegunaan jaringan tidak pernah melebihi 50% dari kapasitas total selama tes, dan batasan/limit dari tes klien tidak pernah tercapai selama tes berlangsung.

Hasilnya (waktu untuk menyelesaikan tes)

PostgreSQL 7.3.2

14:38 min

Larry 8i

16:35 min

Jadi, walaupun kesimpulan umum tidak dapat digambarkan, namun PostgreSQL sepertinya telah membuktikan bahwa ia merupakan pesaing yang serius.

SPEED

PostgreSQL terkenal akan fitur-fitur yang disediakannya, di mana telah diketahui sejak dulu bahwa PostgreSQL mempunyai sekumpulan fitur yang kaya dan lengkap, yang mendukung transaksi, view, subselect, foreign key support, pemeriksaan, dan lain-lain. Namun kekayaan fitur tersebut tidak berlaku dalam hal kecepatan. Padahal seperti yang kita ketahui, kecepatan merupakan salah satu aspek penting yang menentukan kinerja dari sebuah database, di mana sebuah database memerlukan performa dengan kecepatan yang tinggi.

PostgreSQL pada versi-versi awal mempunyai performa yang lambat dan kecepatan dari PostgreSQL database telah diperdebatkan sejak lama. Namun, isu ini tidak pernah benar-benar dibahas secara detail, kecuali pada TPC-C Test yang diterbitkan oleh Great Bridge LLC. Tes ini menunjukkan bahwa performa dari PostgreSQL paling tidak dapat disamakan, bahkan lebih baik, daripada tiga database vendor utama dan MySQL, terutama untuk load yang besar. Validitas dari tes tersebut ditanyakan oleh beberapa kelompok orang, dikarenakan ODBC driver yang digunakan pada PostgreSQL ini kurang meyakinkan.

ADVANTAGES

PostgreSQL memberikan banyak keuntungan kepada para perusahaan atau kegiatan bisnis yang menggunakan database system ini dibandingkan dengan database system yang lain. Berikut adalah keuntungan-keuntungan tersebut, antara lain:

  • Resisten terhadap over-deployment

Dengan menggunakan PostgreSQL, tidak ada seorangpun dapat menuntut untuk pelanggaran terhadap perjanjian lisensi, sebagaimana tidak ada biaya lisensi yang diasosiasikan (digabungkan) untuk software. Hal ini menyebabkan PostgreSQL memberikan keuntungan tambahan, antara lain:

    • bisnis menjadi lebih profitable dengan skala penyebaran yang luas
    • tidak ada kemungkinan diperiksa untuk pemenuhan lisensi
    • fleksibel untuk menjalankan konsep penelitian dan trial deployment tanpa memerlukan biaya lisensi tambahan.

  • Support yang lebih baik

Selain memberikan dukungan yang kuat, PostgreSQL juga mempunyai komunitas ahli dan para peminat.

  • Menghemat biaya staffing

PostgreSQL telah didesain dan dibuat sedemikian rupa untuk mempunyai tingkat pemeliharaan dan kebutuhan yang lebih rendah daripada database systems sebelumnya, walaupun tetap mempertahankan kualitas fitur, stabilitas, dan performa. Sehingga biaya yang diperlukan PostgreSQL menjadi lebih efektif dan lebih dapat diatur.

  • Terpercaya dan stabil

Banyak perusahaan yang melaporkan bahwa PostgreSQL tidak pernah, bahkan sekalipun, mengalami crashed pada saat melakukan operasi dengan tingkat aktivitas yang tinggi.

  • Extensible

Kita tidak memerlukan biaya sekecil apapun dan hanya memerlukan sedikit usaha untuk melakukan perluasan terhadap PostgreSQL.

  • Cross platform

PostgreSQL dapat dijalankan hampir di setiap jenis Unix (34 platform yang paling baru dirilis), juga di Windows dengan menggunakan Cygwin.

  • Didesain untuk high volume environments

PostgreSQL menggunakan penyimpanan data dengan banyak baris (multiple rows) yang dinamakan MVCC. Hal ini dimaksudkan agar PostgreSQL sangat responsif pada high volume environments.

  • Desain database GUI dan administration tools

Beberapa tools GUI yang berkualitas tinggi tersedia untuk mengelola database (pgAdmin, pgAccess), sekaligus desain database(Tora, database architect).

  • Fitur-fitur yang sangat mendukung

PostgreSQL sangat kaya akan fitur-fitur yang disediakannya, antara lain: rules, views, triggers, unicode, sequences, inheritance, outer join, sub-selects, open API, dan masih banyak lagi.

CONCURRENCY CONTROL

Concurrent control atau lebih dikenal dengan Multiversion Concurrency Control (MVCC) biasanya digunakan database management system untuk akses secara concurrent ke database. MVCC menghubungkan setiap user ke database dengan sebuah “snapshot” dari database ke setiap orang yang sedang bekerja dengan database tersebut. Setiap perubahan tidak akan terlihat sampai transaksi selesai dilakukan.

Transaction isolation

Ada empat standar level pembatasan pada SQL standar untuk menghindari 3 kejadian pada concurrent transaction. Yaitu :

  • dirty read : sebuah transaksi membaca data dari transaksi yang belum disimpan
  • nonrepeatable read : sebuah transaksi membaca kembali data yang sebelumnya penah dibaca dan menemukan data tersebut telah diubah oleh transaksi lainnya
  • phantom read : sebuah transaksi meng-execute sebuah query dan menemukan beberapa baris telah dirubah oleh transaksi lain yang sedang berjalan.

Dan empat batasan tersebut adalah :

Di dalam PostGreSQL, user dapat me-request apa saja dari salah satu standar level pembatasan . Tetapi hanya ada 2 batasan yang jelas yaitu Read Committed dan Serializable. Ketika user memilih Repeatable Read, maka user akan mendapatkan Seriliazable dan ketika user memilih Read Uncommitted, maka user akan mendapatkan Read Committed.

Explicit Locking

PostGreSQL menyediakan beberapa model locking untuk mengontrol concurrent access ke table data.

  1. Table-Level Locks

ACCESS SHARE

Commands SELECT dan ANALYZE memerlukan lock tipe ini. Jenis query yang hanya memabaca table dan tidak mengubah data memerlukan lock mode ini.

ROW SHARE

Commands SELECT FOR UPDATE dan SELECT FOR SHARE memerlukan lock jenis ini pada table target.

ROW EXCLUSIVE

Diperlukan saat ada commands untuk merubah data pada table.

SHARE UPDATE EXCLUSIVE

Mode ini memproteksi table dari perubahan concurrent schema.

SHARE

Mode ini memproteksi table dari perubahan data secara concurrent.

SHARE ROW EXCLUSIVE

Secara otomatis diperlukan semua PostGreSQL command.

EXCLUSIVE

Mode ini mengizinkan hanya only concurrent ACCESS SHARE lock.

Lock ini secara otomatis diperlukan pada user table oleh PostGreSQL Command.

ACCESS EXCLUSIVE

Mode ini menjamin hanya 1 user yang sedang mengakses table.

  1. Row-Level Locks

Ada 2 level yaitu share lock level dan exclusive lock level. Exclusive row secara otomatis diperlukan ketika mengupdate atau menghapus suatu baris. Shared lock level tidak memproteksi table dari transaksi – transaksi yang mengakses baris tersebut.

  1. Deadlocks

Ketika ada 2 proses yang sama – sama merequest exclusive-lock, maka PostGreSQL akan melakukan deadlock.

Locking and Indexes

Beberapa cara pengindex-an pada PostGreSQL adalah :

  • B-tree and GiST indexes

Index tipe ini menyediakan concurrency tertinggi tanpa kondisi deadlock

  • Hash indexes

Menyediakan concurrency yang lebih baik, tetapi kemungkinan deadlock masih ada.

  • R-tree indexes

Lock dilepaskan setelah semua comman selesai. Jenis ini sudah jarang digunakan pada saat ini.


STORAGE

Database file layout

Semua data yang diperlukan untuk database cluster disimpan di dalam cluster's data directory. Umumnya mengacu sebagai PGDATA. Lokasi umum untuk PGDATA adalah /var/lib/pgsql/data. Multiple clusters, di-manage oleh postmasters yang berbeda dapat berada pada mesin yang sama.

PGDATA directory mengandung sub-directory:

Item

Description

PG_VERSION

A file containing the major version number of PostgreSQL

base

Subdirectory containing per-database subdirectories

global

Subdirectory containing cluster-wide tables, such as pg_database

pg_clog

Subdirectory containing transaction commit status data

pg_multixact

Subdirectory containing multitransaction status data (used for shared row locks)

pg_subtrans

Subdirectory containing subtransaction status data

pg_tblspc

Subdirectory containing symbolic links to tablespaces

pg_twophase

Subdirectory containing state files for prepared transactions

pg_xlog

Subdirectory containing WAL (Write Ahead Log) files

postmaster.opts

A file recording the command-line options the postmaster was last started with

postmaster.pid

A lock file recording the current postmaster PID and shared memory segment ID (not present after postmaster shutdown)

Subdirectory di atas adalah lokasi default untuk file database.

TOAST (The Oversized-Attribute Storage Technique).

PostgreSQL mengizinkan field value yang besar untuk di kompres dan atau dibagi ke dalam banyak physical rows yang dikenal sebagai TOAST.

TOAST code mengenali 4 strategi yang berbeda untuk menyimpan TOAST-able columns:

· PLAIN prevents either compression or out-of-line storage. This is the only possible strategy for columns of non-TOAST-able data types.

· EXTENDED allows both compression and out-of-line storage. This is the default for most TOAST-able data types. Compression will be attempted first, then out-of-line storage if the row is still too big.

· EXTERNAL allows out-of-line storage but not compression. Use of EXTERNAL will make substring operations on wide text and bytea columns faster (at the penalty of increased storage space) because these operations are optimized to fetch only the required parts of the out-of-line value when it is not compressed.

· MAIN allows compression but not out-of-line storage. (Actually, out-of-line storage will still be performed for such columns, but only as a last resort when there is no other way to make the row small enough.)


Database Page Layout

Overall Page Layout

Item

Description

PageHeaderData

20 bytes long. Contains general information about the page, including free space pointers.

ItemPointerData

Array of (offset,length) pairs pointing to the actual items. 4 bytes per item.

Free space

The unallocated space. New item pointers are allocated from the start of this area, new items from the end.

Items

The actual items themselves.

Special space

Index access method specific data. Different methods store different data. Empty in ordinary tables.

PageHeaderData Layout

Field

Type

Length

Description

pd_lsn

XLogRecPtr

8 bytes

LSN: next byte after last byte of xlog record for last change to this page

pd_tli

TimeLineID

4 bytes

TLI of last change

pd_lower

LocationIndex

2 bytes

Offset to start of free space

pd_upper

LocationIndex

2 bytes

Offset to end of free space

pd_special

LocationIndex

2 bytes

Offset to start of special space

pd_pagesize_version

uint16

2 bytes

Page size and layout version number information

HeapTupleHeaderData Layout

Field

Type

Length

Description

t_xmin

TransactionId

4 bytes

insert XID stamp

t_cmin

CommandId

4 bytes

insert CID stamp

t_xmax

TransactionId

4 bytes

delete XID stamp

t_cmax

CommandId

4 bytes

delete CID stamp (overlays with t_xvac)

t_xvac

TransactionId

4 bytes

XID for VACUUM operation moving a row version

t_ctid

ItemPointerData

6 bytes

current TID of this or newer row version

t_natts

int16

2 bytes

number of attributes

t_infomask

uint16

2 bytes

various flag bits

t_hoff

uint8

1 byte

offset to user data

STORED PROCEDURE

Stored procedure adalah program (prosedur) yang tersimpan di dalam database. Biasanya stored procedure ini ditulis dalam sebuah bahasa database yang disupport oleh vendor. Keunggulan daripada pemakaian stored procedure adalah program yang dibuat akan dijalankan di engine databasenya, bukan pada client dan bukan pada database servernya itu sendiri. Engine database ini pada umumnya lebih cepat dalam menangani query dan request. Database server itu sendiri mempunyai akses langsung ke data di dalam database itu sendiri, sehingga proses manipulasi dari data tersebut dilakukan di dalam servernya sendiri dan database server hanya tinggal memberikan hasil akhir dari sebuah prosedur tersebut. Bayangkan jika prosedur tersebut berada pada client-side program. Pemanipulasian data akan berada di client, sehingga data traffic antara client dan server akan tinggi. Selain itu, program harus menunggu response dari server untuk bisa masuk dalam tahap prosedur selanjutnya.

Beberapa kegunaan dasar dari stored procedure adalah misalnya data validation (biasanya dalam suatu trigger), atau peng-enkapsulasian suatu rangkaian proses query yang kompleks. Rangkaian query tersebut akan berjalan lebih cepat jika berada di database server daripada berjalan di client program dengan cara mengirimkan querynya satu persatu.

Kegunaan lain dari stored procedure adalah memudahkan data management. Kita bisa langsung memasukkan business logic ke dalam cara pengambilan data kita melalui stored procedure, sehingga meminimalkan penulisan code pengambilan data pada program. Hal ini dapat meminimalisir kesalahan code pada program dan juga meminimalisir data corruption pada proses manipulasi data.

Procedural language yang disupport langsung oleh postgreSQL adalah PL/pgSQL (Procedural Language/postgre SQL). PL/pgSQL ini adalah sebuah procedural language yang memberikan fleksibilitas tinggi dibandingkan dengan query biasa, seperti fasilitas loop dan control structures (if/case). Program yang dibuat oleh PL/pgSQL adalah sebuah function dan dianggap oleh postgreSQL sebagai sebuah statement atau sebuah aksi yang dilakukan trigger.

Tujuan dari PL/pgSQL adalah membuat procedural language yang:

  • dapat membuat function dan prosedur trigger
  • memfasilitasi control structure pada query
  • melakukan manipulasi data yang kompleks
  • meng-inherit semua types, operator, dan function yang dibuat oleh user
  • mudah dibuat dan mudah dijalankan

Procedural language lainnnya yang disupport oleh postgreSQL misalnya PL/Tcl, PL/Perl, PL/Python, dll.

Procedural language harus di “install” ke dalam sebuah database terlebih dahulu untuk dapat digunakan oleh database tersebut.


Untuk membuat sebuah function, kita bisa membuatnya dengan cara sebagai berikut:

CREATE FUNCTION handler_function_name()

RETURNS language_handler

AS 'path-to-shared-object'

LANGUAGE C;

Lalu, untuk membuat sebuah validator, kita menggunakan

CREATE FUNCTION validator_function_name(oid)

RETURNS void

AS 'path-to-shared-object'

LANGUAGE C;

Lalu, kita mendeclare functionnya

CREATE [TRUSTED] [PROCEDURAL] LANGUAGE language-name

HANDLER handler_function_name

[VALIDATOR validator_function_name] ;

keyword [trusted] di sana adalah agar user yang bukan superuser dapat menggunakan function tersebut.

Jika kita ingin membuat PL dalam PL/pgSQL

CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler AS

'$libdir/plpgsql' LANGUAGE C;

CREATE FUNCTION plpgsql_validator(oid) RETURNS void AS

'$libdir/plpgsql' LANGUAGE C;

CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql

HANDLER plpgsql_call_handler

VALIDATOR plpgsql_validator;

Bentuk umum untuk membuat sebuah function dalam postgreSQL adalah sbb

CREATE FUNCTION populate() RETURNS integer AS $$

DECLARE

-- declarations

BEGIN

PERFORM my_function();

END;

$$ LANGUAGE plpgsql;

DATA MANIPULATION

Untuk membuat sebuah table

CREATE TABLE products (

product_no integer,

name text,

price numeric

);

Untuk memasukkan data ke table di atas

INSERT INTO products VALUES (1, 'Cheese', 9.99);

atau kita dapat memasukkan sesuai tuple/field yang kita inginkan

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);

INSERT INTO products (name, price, product_no) VALUES ('Cheese', 9.99, 1);

Kita juga dapat mengosongkan sebuah field, sehingga diisi dengan nilai defaultnya

INSERT INTO products (product_no, name) VALUES (1, 'Cheese');

kita juga dapat meminta untuk dimasukkan default value untuk memperjelas query

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', DEFAULT);

INSERT INTO products DEFAULT VALUES;

Untuk mengupdate, kita harus memberikan nama table dan column yang diupdate, nilai baru dari column tersebut, dan row mana saja yang diupdate. Contoh:

UPDATE products SET price = 10 WHERE price = 5;

Untuk menghapus, kita bisa langsung menghapus sebuah row dari primary keynya atau dari sebuah conditional statement. Secara garis besar, menghapus tidak jauh berbeda dari update. Contohnya:

DELETE FROM products WHERE price = 10;

atau kita juga bisa menghapus semua entry dari sebuah table

DELETE FROM products;


KESIMPULAN

· PostgreSQL adalah oper source relation database system yang sangat powerful. PostGreSQL sudah lebih dari 15 tahun aktif dalam pengembangannya dan arsitektur yang dibangunnyapun memiliki reputasi yang bagus, handal, lengkap, dan akurat.

· PostgreSQL terkenal akan fitur-fitur yang disediakannya, namun tidak untuk hal kecepatan. PostgreSQL pada versi-versi awal mempunyai performa yang lambat dan kecepatan dari PostgreSQL telah diperdebatkan sejak lama.

· Ada banyak platform yang dapat menjalankan PostgreSQL, antara lain: Unix-compatible platform, IBM, Microsoft corporation, dan lain-lain.

· PostgreSQL memberikan banyak keuntungan, antara lain: Resisten terhadap over-deployment, menyediakan support yang lebih baik, menghemat biaya staffing, terpercaya dan stabil, extensibleI, cross platform, didesain untuk high volume environments, desain database GUI dan administration tools, serta fitur-fitur yang sangat mendukung.

· Untuk memanipulsi data ada tiga jenis perintah utama yang dapat dilakukan pada postGreSQL yaitu Insert data, Manipulasi data, dan terakhir menghapus data.

· PostgreSQL menyediakan keluasaan bagi user untuk menentukan siapa saja yang boleh mengakses basis data mereka melalui Access Control.

· PostgreSQL mengauthentikasikan user dalam beberapa metode: Trust, Reject, Crypt, Password

· Administrative Tool berupa backup dan restore, yang disediakan oleh PostgreSQL, diantaranya dump, file system, dan online backup yang menyediakan hot standby system.

· PostgreSQL menggunakan multiversion model (Multiversion Concurrency Control, MVCC). PostgreSQL memiliki 2 level transaksi isolation yaitu Read Commited Isolation Level dan Serializable Isolation Level.

· PostgreSQL menyediakan indexing yang di-define sendiri oleh user yang akan memudahkan pencarian dalam tabel.


DAFTAR PUSTAKA

PostgreSQL Global Development Group. http://www.postgresql.org. (27 Februari 2006, 16:07)

Schaeffer, C. dan Hondius, J. http://research.rem.nl (27 Februari 2006, 16:11)

http://www.astroconsulting.com/FAQs/art_evolution_in_greece_and_rome.htm (27 Februari 2006, 16:11)

http://www.bulfinch.org/fables/welcome.html#Contents (27 Februari 2006, 16:11)

Daithankar, Shridhar dan Berkus, Josh. http://www.varlena.com. (27 Februari 2006, 16:05)




.