…PAPER… …PAPER… Presented by: Nurilla Reski Iryani 1204000653 Ratih Amalia 1204000734 Wisnu LW 120400092Y
…PAPER……PAPER…
Presented by:
Nurilla Reski Iryani1204000653
Ratih Amalia1204000734
Wisnu LW120400092Y
DAFTAR ISIDAFTAR ISI
Daftar isi 2
About 3
Indexing 5
Administrative Tools 7
Platform 14
Price 15
Security 15
Performance 17
Speed 19
Advantages 19
Concurency Control 20
Storage 23
Stored Procedure 25
Data Manipulation 28
Kesimpulan 29
Daftar Pustaka 30
3
ABOUTABOUT
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
4
Limit Value
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
TableUnlimited
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.
5
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.
6
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.
7
INDEXINGINDEXING
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:
Pada contoh diatas customer_custid_idx adalah nama index, customer
adalah nama tabel yang diberi index dan customer_id adalah column
8
CREATE INDEX customer_custid_idx ON customer (customer_id);
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.
Index partial_salary hanya diberikan pada rows yang
mempunyai salary > 2100.
Pada versi 8.1, men-support bitmap index scans.
9
create index partial_salary on employee(age) where salary>2100;
ADMINISTRATIVE TOOLSADMINISTRATIVE 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
10
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.
11
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.
12
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.
13
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.
14
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:
a. 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
15
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 < infile
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
16
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.
c. 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:
17
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.
Karena kita bisa menggabungkan sepanjang tak terhingga
dari sequence file WAL, kontinuitas backup dapat
diperoleh hanya dengan secara kontinyu mengarsipkan
file WAL.
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.
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.
18
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 Con gurationfi
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
19
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.
PLATFORMPLATFORM
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
20
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
PRICEPRICE
PostgerSQL merupakan software yang open source.
SECURITYSECURITY
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
21
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
22
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 [email protected]
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
23
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
PERFORMANCEPERFORMANCE
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
24
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-log 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
25
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.
SPEEDSPEED
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.
26
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.
ADVANTAGESADVANTAGES
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:
o bisnis menjadi lebih profitable dengan skala penyebaran
yang luas
o tidak ada kemungkinan diperiksa untuk pemenuhan
lisensi
o fleksibel untuk menjalankan konsep penelitian dan trial
deployment tanpa memerlukan biaya lisensi tambahan.
27
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
28
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 CONTROLCONCURRENCY 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 :
29
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.
a. 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.
30
Lock ini secara otomatis diperlukan pada user table oleh
PostGreSQL Command.
ACCESS EXCLUSIVE
Mode ini menjamin hanya 1 user yang sedang mengakses table.
b. 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.
c. 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.
31
STORAGESTORAGE
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_VERSIONA file containing the major version number of
PostgreSQL
base Subdirectory containing per-database subdirectories
globalSubdirectory containing cluster-wide tables, such as
pg_database
pg_clogSubdirectory containing transaction commit status
data
pg_multixactSubdirectory 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_twophaseSubdirectory containing state files for prepared
transactions
pg_xlog Subdirectory containing WAL (Write Ahead Log) files
postmaster.o
ptsA file recording the command-line options the
postmaster was last started with
postmaster.p
id
A lock file recording the current postmaster PID and
shared memory segment ID (not present after
32
Item Description
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:
Database Page Layout
Overall Page Layout
Item Description
PageHeaderDa 20 bytes long. Contains general information about the
33
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
Item Description
ta page, including free space pointers.
ItemPointerD
ata
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 TypeLengt
hDescription
pd_lsn XLogRecPtr8
bytes
LSN: next byte after last byte of
xlog record for last change to
this page
pd_tli TimeLineID4
bytesTLI of last change
pd_lowerLocationIn
dex
2
bytesOffset to start of free space
pd_upperLocationIn
dex
2
bytesOffset to end of free space
pd_specialLocationIn
dex
2
bytesOffset to start of special space
pd_pagesize_ver
sionuint16
2
bytes
Page size and layout version
number information
HeapTupleHeaderData Layout
34
Field TypeLengt
hDescription
t_xminTransactionI
d
4
bytesinsert XID stamp
t_cmin CommandId4
bytesinsert CID stamp
t_xmaxTransactionI
d
4
bytesdelete XID stamp
t_cmax CommandId4
bytes
delete CID stamp (overlays with
t_xvac)
t_xvacTransactionI
d
4
bytes
XID for VACUUM operation moving a
row version
t_ctidItemPointerD
ata
6
bytes
current TID of this or newer row
version
t_natts int162
bytesnumber of attributes
t_infoma
skuint16
2
bytesvarious flag bits
t_hoff uint81
byteoffset to user data
STORED PROCEDURESTORED 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
35
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
36
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.
37
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
38
CREATE FUNCTION populate() RETURNS integer AS $$
DECLARE
-- declarations
BEGIN
PERFORM my_function();
END;
$$ LANGUAGE plpgsql;
DATA MANIPULATIONDATA 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,
39
'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;
40
KESIMPULANKESIMPULAN
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.
41
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.
42
DAFTAR PUSTAKADAFTAR PUSTAKA
PostgreSQL Global Development Group. http://www.postgresql.org. (27Februari 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 (27Februari 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. (27Februari 2006, 16:05)
43