Thursday, April 23, 2015

Perintah Dasar-dasar pada postgresql

Perintah Dasar-dasar pada postgresql

Topik ini membahas hal-hal yang berkaitan dengan pekerjaan seorang administrator seperti menambah useruser groupsecurity, penyelamatan data, atau optimasi.


1 User
Pemberian hak kepada user lain dapat diberikan oleh user postgres.
$ psql -u template1
Username: postgres
Password:
template1=# CREATE USER fendy WITH PASSWORD ’a’ CREATEDB;
Gunakan \h untuk keterangan lebih lengkap perintah CREATE USER ini.
template1=# \h CREATE USER
Command: CREATE USER
Description: Creates a new database user
Syntax:
CREATE USER username
[ WITH
[ SYSID uid ]
[ PASSWORD ’password’ ] ]
[ CREATEDB | NOCREATEDB ] [ CREATEUSER | NOCREATEUSER ]
[ IN GROUP groupname [, ...] ]
[ VALID UNTIL ’abstime’ ]
Berikut ini ada beberapa contoh perintah yang berkaitan dengan user:
Buat user tanto dan masukkan dalam grup dokter:
CREATE USER tanto PASSWORD ’a’ IN GROUP dokter;
Buat user kopra dan masukkan dalam grup apotek serta tu_medis:
CREATE USER kopra PASSWORD ’b’ IN GROUP apotek, tu_medis;
Setiap user diperkenankan mengubah password dengan cara:
ALTER USER kopra WITH PASSWORD ’c’;
Perubahan password dengan perintah SQL di atas hanya berfungsi jika file konfigurasi pg_hba.conf terkandung option password.

2 Grup
User group adalah kumpulan user PostgreSQL. Pengelompokan ini berguna untuk kemudahan pemberian otoritas (GRANT/REVOKE).
CREATE GROUP dokter;
Bisa juga memasukkan user dalam suatu grup dengan cara seperti ini:
ALTER GROUP dokter ADD USER tanto, kopra, kosud, dewi;
Menghapus user dari suatu grup:
ALTER GROUP dokter DROP USER dewi;

3 Perlindungan Konektivitas
Postgres meletakkan kebijaksanaan security-nya di file pg_hba.conf. 1
Formatnya adalah:
host DBNAME IP_ADDRESS ADDRESS_MASK USERAUTH [AUTH_ARGUMENT]
Secara default, Postgres membiarkan setiap user untuk login tanpa diharuskan mengisikan password:
local all trust host all 127.0.0.1 255.255.255.255 trust
Agar Postgres dapat diakses dari remote host dengan IP 192.168.1.x maka Anda perlu menambahkan baris berikut ini pada pg_hba.conf :
host template1 192.168.1.0 255.255.255.0 ident sameuser
Baris di atas berarti client manapun dengan IP Address 192.168.1.x dapat mengakses template1 tanpa proses otorisasi (option sameuser).
Gunakan option password dimana proses otorisasi akan diterapkan.
host all 192.168.1.0 255.255.255.0 password

3.1 Plain Text Password
Untuk security yang lebih ketat lagi gunakan plain text untuk menyimpan password:
host all 192.168.1.0 255.255.255.0 password kunci
Contoh di atas menunjukkan bahwa user dari host dengan alamat IP 192.168.1.x boleh terkoneksi ke server Postgres dengan kewajiban mengisikan username dan password yang terdapat dalam file kunci yang terletak di home directory
user Postgres.
$ cd /usr/local/pgsql/data
$ pg_passwd kunci
Username: owo
New password:
Re-enter new password:
Karena direktori dan file-nya milik user postgres maka setiap perubahan password hanya dapat dilakukan oleh user postgres ini. Password yang tertulis dalam filekunci akan di-encrypt agar lebih terjaga kerahasiannya.

4 Perlindungan Data
Sistem perlindungan terhadap data dilakukan pada level tabel dan bukan pada aplikasi, yaitu dengan cara pemberian hak (GRANT) atau pencabutan hak (REVOKE) pada perintah SQL. Sehingga perubahan hak tidak akan mempengaruhi kode program. Selain superuser postgres, yang berhak memberikanGRANT REVOKE adalah user yang membuat database bersangkutan.
Ketika tabel dibuat, hanya pemiliknya yang dapat menggunakan. Jika user lain diperbolehkan juga, maka pembuatnya harus memberikan GRANT. Hak akses yang dapat diberikan adalah SELECTINSERTUPDATEDELETE, danRULE.
CREATE TABLE test_izin (id INT);
Selama tabel tersebut belum diberikan hak apapun pada user lain, maka hanya pembuatnya yang dapat melakukan perubahan terhadap tabel tersebut.
GRANT SELECT ON test_izin TO anjas;
Namun sekali suatu tabel tercatat dapat diakses oleh user lain (pemberianGRANT), maka pembuatnya sendiri harus mendapat GRANT pula. Bila di-GRANT-kan ke grup:
GRANT ALL ON test_izin TO GROUP dokter;
ALL berarti seluruh hak akses diperbolehkan. Untuk mencabutnya, gunakanREVOKE:
REVOKE ALL ON test_izin FROM GROUP dokter;
Gunakan user PUBLIC jika Anda bermaksud meng-GRANT REVOKE suatu tabel bagi seluruh user.
GRANT SELECT ON test_izin TO PUBLIC;

5 Backup
Seluruh objek (tabel, isi tabel, view, stored procedures, dll) dalam suatu database dapat “dikeluarkan” (baca: dibackup) dalam bentuk SQL script.
$ pg_dump -u -f rab.sql rab
rab.sql adalah nama output file, sedangkan rab adalah nama database. Untuk restore dapat menggunakan psql:
$ psql -u -f rab.sql rab
Atau bisa juga lewat prompt psql dengan perintah \i:
$ psql -u rab
Username: sugiana
Password:
rab=> \i rab.sql
Sebelum restore tentunya Anda harus memastikan bahwa database rab kosong, setidaknya tidak berisi objek yang akan di-restore. Mengosongkan database tidak harus dengan menghapus (DROP) tabel satu per satu, melainkan bisa dengan menghapus database dan membuatnya kembali. Jika aplikasi Anda memanfaatkan field OID yang dimiliki Postgres gunakan option -o agar nilai-nilai OID tidak
berubah:
$ pg_dump -o -u -f rab.sql rab

5.1 Dump Lewat Direktori
Perpindahan database dapat juga dilakukan dengan operasi file dan direktori. Hal seperti ini kadang dipakai manakala sistem crash dan kita belum sempat melakukan proses dump. Postgres menyimpan setiap database ke dalam suatu direktori.
Setiap objeknya (seperti tabel) disimpan dalam sebuah file. Secara default seluruh direktori tersebut tersimpan dalam /var/lib/pgsql/base untuk RedHat dan /var/lib/pgsql/data untuk SuSE, atau jika Postgres hasil kompilasi dari source biasanya diletakkan di /usr/local/pgsql/data.Jadi jika Anda ingin mem-backup
seluruh database maka Anda dapat melakukannya dengan utility kompresi biasa seperti tar.
$ cd /usr/local/pgsql
$ tar cfz backup.tgz data
Setelah server Postgres pulih, Anda tinggal meng-ekstrak-nya ke tempat semula :
$ cd /usr/local/pgsql
$ tar xfz backup.tgz
Perlu Anda ketahui bahwa Postgres menyimpan informasi seluruh nama database dalam database template1 pada tabel pg_database. Jadi meski Anda telah meng-copy direktori database ke tempat yang sudah ditentukan namun belum mendaftarkannya ke tabel tersebut maka database tersebut tetap saja belum bisa diakses. Perlu sedikit tindakan
pengakalan untuk mendaftarkannya.
INSERT INTO pg_database
VALUES(’rab’,100,’rab’);
Tentu saja tindakan di atas tidak perlu dilakukan jika direktori yang Anda restore termasuk direktori template1 dari sistem sebelumnya.

5.2 Seluruh Database
Sebuah sistem Postgres bisa terdiri dari beberapa database. Pada saat upgrade Anda tentu perlu mem-backup seluruh database tersebut. Untunglah postgres telah menyiapkan utility pg_dumpall untuk masalah ini:
$ pg_dumpall > db.out
Setelah diupgrade, lakukan restore.
$ psql -e template1 < db.out


6 Cleaning-up
Aktivitas query biasanya meninggalkan “sampah” dalam direktori database. Postgres menyediakan perintah VACUUM untuk membuang garbage yang tak perlu tersebut.
VACUUM;
Atau gunakan VACUUM ANALYZE untuk mempercepat hasil query karena perintah ini membuat statistik yang akan dimanfaatkan oleh query optimizer.
VACUUM ANALYZE

Cara Instalasi dan Konfigurasi Proxy Server Untuk Youtube Cache

Update & Install SQUID Packages:

# apt-get update
# apt-get install squid squidclient squid-cgi
# apt-get install gcc
# apt-get install build-essential
# apt-get install sharutils
# apt-get install ccze
# apt-get install libzip-dev
# apt-get install automake1.9
# apt-get install acpid
# apt-get install unzip
# cd /tmp 

Download & Install LUSCA Packages:

# wget -c http://cirebonwifi.pusku.com/files/LUSCA_HEAD-r14809.tar.gz
# tar -xvzf LUSCA_HEAD-r14809.tar.gz
# cd LUSCA_HEAD-r14809 

Patching Lusca Packages:

# wget -c http://cirebonwifi.pusku.com/files/LUSCA_HEAD-r14809-YOUTUBE.PACTH.tar.gz
# tar -xvzf LUSCA_HEAD-r14809-YOUTUBE.PACTH.tar.gz
# patch -p0 < 3xx-loop.diff
# patch -p0 < async-issue.diff
# patch -p0 < http-gzip.diff
# patch -p0 < ignore-must-revalidate.diff
# patch -p0 < improve-nn-parser.diff
# patch -p0 < lusca-vary.diff
# patch -p0 < segmentation-fault.diff

Configure & Install:

./configure --prefix=/usr --exec_prefix=/usr --bindir=/usr/sbin --sbindir=/usr/sbin --libexecdir=/usr/lib/squid --sysconfdir=/etc/squid --localstatedir=/var/spool/squid --datadir=/usr/share/squid  --enable-async-io=24 --with-aufs-threads=24 --with-pthreads --enable-storeio=aufs --enable-linux-netfilter --enable-arp-acl --enable-epoll --enable-removal-policies=heap --with-aio --with-dl --enable-snmp --enable-delay-pools --enable-htcp --enable-cache-digests --disable-unlinkd --enable-large-cache-files --with-large-files --enable-err-languages=English --enable-default-err-language=English --with-maxfd=65536

# make
# make install

# cd /etc/init.d/
# mv /etc/init.d/squid /etc/init.d/squid.backup
# wget -c http://cirebonwifi.pusku.com/files/squid.init.ubuntu
# mv /etc/init.d/squid.init.ubuntu /etc/init.d/squid
# sudo chmod +x /etc/init.d/squid
# /etc/init.d/squid stop

# mkdir -p /usr/local/share/squid
# chmod 777 /usr/local/share/squid
# cd /usr/local/share/squid
# wget -c http://cirebonwifi.pusku.com/files/cirebonwifi-youtube-supercache.tar.gz
# tar -xvzf cir bonwifi-youtube-supercache.tar.gz

# chown proxy:proxy /cache1
# chown proxy:proxy /cache2
# chmod 777 /cache1
# chmod 777 /cache2
# chown proxy:proxy /usr/local/share/squid/supercache.conf
# chmod 777 /usr/local/share/squid/supercache.conf
# chown proxy:proxy /usr/local/share/squid/supercache.pl
# chmod 777 /usr/local/share/squid/supercache.pl
# chmod +x /usr/local/share/squid/supercache.pl

# cd /etc/squid/
# mv squid.conf squid.conf.backup
# wget -c http://cirebonwifi.pusku.com/files/squid.conf.youtube-supercache.zip
# unzip squid.conf.youtube-supercache.zip
# cp squid.conf.youtube-supercache squid.conf


Sampai disini silahkan edit file squid.conf menyesuaikan dengan jaringan Anda
Setelah itulanjutkan dengan langkah-langkah berikut:

# squid -f /etc/squid/squid.conf -z
# sudo /etc/init.d/squid restart
# squid -NDd1
# reboot

Setelah restart mesinsilakan cek dengan perintah berikut:
# tail -f /var/log/squid/access.log | ccze



cara konfigurasi waktu pada postgres

cara konfigurasi waktu pada postgres
Bab ini berisi kumpulan TRIK dan TIPS yang cukup bermanfaat dalam perjalanan pembuatan aplikasi database.

1 Format Tanggal
Dalam hal memasukkan record (INSERT) secara default format tanggal yang diperkenankan adalah MM/DD/YYYY:
CREATE TABLE test (tgl DATE);
INSERT INTO test VALUES (’8/17/1945’);
SELECT * FROM test;
tgl
------------
1945-08-17
Meski Postgres memiliki kemampuan mengenal tanggal manakala blok pertama lebih besar dari 12 maka dianggap
tanggal:
INSERT INTO test VALUES (’17/8/1945’);
SELECT * FROM test;
tgl
------------
1945-08-17
1945-08-17
(2 rows)
namun kita perlu meyakinkan diri bahwa format yang dikehendaki sesuai dengan sistem Indonesia yaitu DD/MM/YYYY,
sehingga ’1/10/1945’ pasti 1 Agustus 1945 dan bukan 10 Januari 1945. Gunakan perintah SET DATESTYLE sebelum
melakukan aktivitas INSERT atau UPDATE, dan cukup dilakukan sekali dalam sebuah database session:
SET DATESTYLE TO ’european’;
INSERT INTO test VALUES (’1/10/1945’);
SELECT * FROM test;
Tgl
-----------1945-08-17
1945-08-17
1945-10-01
(3 rows)
Sebaiknya lakukan perintah SET DATESTYLE di atas sesaat setelah aplikasi Anda berhasil login ke database. Bisa
jadi Anda belum merasa puas dengan tampilannya karena formatnya tetap saja tidak sesuai dengan nilai yang dimasukkan.
Gunakan
SET DATESTYLE TO ’sql’;
sebagai pelengkap
SET DATESTYLE to ’european’;
Dengan demikian tampilan tanggal berformat DD/MM/YYYY:
SELECT * FROM test;
tgl
------------
17/08/1945
17/08/1945
01/10/1945
(3 rows)
Selain lewat set environment, Postgres menyediakan fungsi to_char untuk masalah format tanggal ini:
SELECT to_char(tgl, ’dd-mm-yyyy’) AS tgl FROM test;
tgl
------------
17-08-1945
17-08-1945
01-10-1945
(3 rows)

2 Query Tanpa Tabel
Query dapat dilakukan tanpa menggunakan tabel. Biasanya digunakan untuk meng-execute suatu fungsi dan menampilkan
hasilnya, seperti fungsi timeofday() berikut:
template1=> SELECT timeofday();
timeofday
-----------------------------------Sun
Apr 02 07:18:48.401226 2000 JAVT
(1 row)
Atau untuk melihat current user:
template1=> select user;
getpgusername
------------postgres
(1
row)

3  Mengubah String Menjadi Tanggal
Gunakan fungsi text_datetime untuk mengubah suatu string menjadi tipe tanggal dan jam (datetime). Format
string masukan harus disesuaikan dengan format yang berlaku (lihat pembahasan Format Tanggal di atas).
template1=> SELECT
text_datetime(’31-12-2000’);
text_datetime
----------------------------Sun
31 Dec 00:00:00 2000 JAVT
(1 row)
Jika Anda ingin menyertakan jam, pisahkan dengan spasi antara tanggal dan jam yang Anda masukkan:
template1=> SELECT text_datetime(’31-12-2000 14:12:7’);
text_datetime
----------------------------Sun
31 Dec 14:12:07 2000 JAVT
(1 row)

4 Memisahkan date dan time Pada datetime
Gunakan fungsi date() untuk mengubah tipe data datetime menjadidate. Kita dapat menggunakan fungsi
timeofday() yang mengembalikan nilai bertipe datetime untuk contoh ini:
template1=> SELECT date(timeofday()), time(timeofday());
date|time
----------+-------02-04-2000|07:21:48
(1
row)

5 Penambahan dan Pengurangan Untuk date
Tipe date dapat langsung ditambah atau dikurangi sebagaimana pada bilangan. Contoh berikut menggunakan fungsi
now() untuk mengetahui tanggal kemarin, hari ini, dan esok:
template1=> select now()-1 as kemarin, date(now()) as kini, now()+1 as esok;
kemarin| kini| esok
----------+----------+---------01-04-2000|02-04-2000|03-04-2000
(1
row)