Pendatang dari MySQL biasanya membawa satu kebiasaan: mengetik USE nama_database setiap kali ingin berpindah kerja. Di PostgreSQL, perintah itu tidak ada — dan alasannya bukan sekadar nama yang beda. Satu koneksi psql hanya boleh bekerja di satu database pada satu waktu, dan berpindah database berarti membuka koneksi baru ke server. Pada chapter ini kita menyiapkan dua database, berpindah di antara keduanya lewat \connect, memilih database sejak awal lewat opsi -d, dan memahami cara PostgreSQL mengatur batas antar database.
Satu Koneksi, Satu Database #
Di mata PostgreSQL, database adalah sekat yang kaku: satu koneksi tidak bisa membaca tabel di dua database sekaligus, dan tidak ada perintah SQL untuk “beralih” database di tengah jalan. Tabel yang ingin kita hubungkan harus berada dalam satu database — di schema-schema yang berbeda bila perlu, seperti yang kita pelajati di chapter sebelumnya.
Perbandingan kebiasaan dua dunia tersebut ringkasnya begini:
| Kebutuhan | MySQL | PostgreSQL |
|---|---|---|
| Pindah database di tengah sesi | USE nama_database | \connect nama_database (meta-command psql) |
| Pilih database saat memulai | mysql nama_database | psql -d nama_database |
| Baca tabel dua “database” sekaligus | Bisa, dengan awalan nama_db.nama_tabel | Tidak bisa — gunakan schema dalam satu database |
Baris ketiga adalah konsekuensi desain yang paling terasa: pemisahan antar aplikasi di PostgreSQL sebaiknya memakai schema dalam satu database bila datanya saling berkaitan, dan memakai database terpisah bila datanya memang tidak boleh bercampur.
Sebelum berlatih, kita siapkan dua database terlebih dahulu dari database maintenance postgres:
CREATE DATABASE latihan_db;
CREATE DATABASE toko_maju_jaya;Output yang Dihasilkan:
CREATE DATABASE
CREATE DATABASE\connect: Pindah Tanpa Keluar dari psql #
Meta-command \connect (boleh disingkat \c) memindahkan sesi ke database lain tanpa perlu menutup psql dan membuka yang baru secara manual. File berikut memperagakannya dua kali, dengan current_database() sebagai penunjuk arah di tiap persinggahan:
SELECT current_database();
\connect latihan_db
SELECT current_database();
\connect toko_maju_jaya
SELECT current_database();Output yang Dihasilkan:
current_database
------------------
postgres
(1 row)
You are now connected to database "latihan_db" as user "postgres".
current_database
------------------
latihan_db
(1 row)
You are now connected to database "toko_maju_jaya" as user "postgres".
current_database
------------------
toko_maju_jaya
(1 row)Alur file tersebut: sesi dimulai di postgres; \connect latihan_db memindahkan koneksi (ditandai pesan You are now connected to database … dari psql); lalu \connect toko_maju_jaya memindahkannya sekali lagi. Setiap kali pindah, function current_database() melaporkan alamat baru — tiga laporan, tiga database, dalam satu file yang sama.
Bentuk lengkap \connect juga menerima pengguna dan host tertentu, misalnya \connect latihan_db budi, tetapi untuk berpindah database sehari-hari cukup nama database saja. Seluruh perintah setelah baris \connect — CREATE TABLE, INSERT, apa pun — berlaku di database yang baru.
Memilih Sejak Awal: Opsi -d #
Ketika kita sudah tahu database tujuan sebelum membuka psql, tidak perlu repot-repot \connect: opsi -d (atau --dbname) langsung memilih database saat koneksi dibuat. File skrip shell berikut menyiapkan empat kali koneksi singkat dengan pola -c (jalankan satu perintah lalu keluar):
psql -d latihan_db -c "SELECT current_database();"
psql -d toko_maju_jaya -c "SELECT current_database();"
psql -d postgres -c "SELECT current_database();"
psql -c "SELECT current_database();"Output yang Dihasilkan:
current_database
------------------
latihan_db
(1 row)
current_database
------------------
toko_maju_jaya
(1 row)
current_database
------------------
postgres
(1 row)
current_database
--------------------
pgtutor_9f481ecd11
(1 row)Empat blok hasil di atas masing-masing berasal dari satu proses psql yang berbeda — perhatikan current_database() yang selalu menuruti nilai opsi -d: latihan_db, toko_maju_jaya, postgres. Panggilan terakhir sengaja tidak memakai -d: psql polos memakai database default dari environment variable PGDATABASE (di mesin pengujian materi ini nilainya diarahkan ke database kerja sementara untuk latihan; di komputer Anda yang belum mengaturnya, psql akan mencoba database bernama sama dengan nama pengguna Anda). Bila database itu tidak ada, psql menolak menyala dengan error koneksi — saat itulah -d atau PGDATABASE wajib disebut.
\conninfo: Melihat Kita Tersambung ke Mana #
Setelah beberapa kali berpindah-pindah, sesi kadang membingungkan: ini database yang mana, dengan pengguna yang mana? Meta-command \conninfo menjawabnya dengan satu baris ringkasan berisi pengguna aktif, database aktif, dan cara koneksi terjadi (socket Unix atau alamat TCP). Jalankan kapan pun di dalam psql — tidak ada argumen, tidak ada output panjang. Ini padanan paling dekat dengan kebiasaan mengetik SELECT current_database();, tetapi lengkap dengan informasi pengguna dan jalur koneksi.
Kita kini bisa membuat database, menaturnya dengan schema, dan berpindah antar keduanya dengan leluasa. Satu anak tangga tersisa sebelum benar-benar mulai bekerja dengan data: menciptakan tabel pertama kita secara sengaja — kolom, tipe, dan aturannya kita tentukan sendiri. Itulah isi chapter Membuat Tabel.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
connect-dalam-sesi.sql
Unduh berkasSELECT current_database();
\connect latihan_db
SELECT current_database();
\connect toko_maju_jaya
SELECT current_database();
pilih-database.sh
Unduh berkaspsql -d latihan_db -c "SELECT current_database();"
psql -d toko_maju_jaya -c "SELECT current_database();"
psql -d postgres -c "SELECT current_database();"
psql -c "SELECT current_database();"
siapkan-database.sql
Unduh berkasCREATE DATABASE latihan_db;
CREATE DATABASE toko_maju_jaya;