Topik ini membahas keterampilan psql yang dipakai setiap hari, yaitu koneksi ke server, meta-command untuk menjelajah, dan pembacaan struktur tabel. Keempat topik pada modul ini memakai basis data perpustakaan, dan blok penyiapan di bawah membangun ulang tabel beserta datanya secara idempoten sehingga setiap query pada topik ini dapat diulang persis.
Blok penyiapan dataset#
Seluruh topik pada jalur ini diawali blok serupa yang menghapus tabel lama bila ada, membuatnya kembali, lalu mengisi data contoh. Opsi -q membuat psql senyap terhadap status per pernyataan, sedangkan variabel PGOPTIONS menekan pesan NOTICE milik DROP IF EXISTS agar keluaran tetap ringkas.
# siapkan ulang tabel dan data contoh untuk topik ini
PGOPTIONS='-c client_min_messages=warning' psql -q -U postgres -d perpustakaan <<'SQL'
DROP TABLE IF EXISTS peminjaman, buku, anggota, kategori CASCADE;
CREATE TABLE kategori (id SERIAL PRIMARY KEY, nama TEXT NOT NULL UNIQUE);
CREATE TABLE anggota (id SERIAL PRIMARY KEY, nama TEXT NOT NULL, email TEXT UNIQUE, bergabung DATE NOT NULL, aktif BOOLEAN NOT NULL DEFAULT TRUE);
CREATE TABLE buku (id SERIAL PRIMARY KEY, judul TEXT NOT NULL, penulis TEXT NOT NULL, tahun INTEGER NOT NULL, kategori_id INTEGER REFERENCES kategori(id));
CREATE TABLE peminjaman (id SERIAL PRIMARY KEY, anggota_id INTEGER NOT NULL REFERENCES anggota(id), buku_id INTEGER NOT NULL REFERENCES buku(id), tanggal_pinjam DATE NOT NULL, tanggal_kembali DATE);
INSERT INTO kategori (nama) VALUES ('Pemrograman'), ('Sains'), ('Sejarah'), ('Fiksi'), ('Statistika');
INSERT INTO anggota (nama, email, bergabung, aktif) VALUES ('Ali Rahman', '[email protected]', '2024-01-15', TRUE), ('Budi Santoso', '[email protected]', '2024-03-02', TRUE), ('Citra Kirana', '[email protected]', '2024-05-20', FALSE), ('Dewi Lestari', '[email protected]', '2024-08-11', TRUE), ('Eka Pratama', NULL, '2025-01-30', TRUE);
INSERT INTO buku (judul, penulis, tahun, kategori_id) VALUES ('Dasar Basis Data', 'Sari Wulandari', 2021, 1), ('Jaringan Komputer', 'Ahmad Fauzi', 2019, 1), ('Fisika untuk Pemula', 'Rina Marlina', 2020, 2), ('Kimia Organik', 'Rina Marlina', 2022, 2), ('Sejarah Nusantara', 'Bambang Wijaya', 2018, 3), ('Cerita Kota Lama', 'Nur Aisyah', 2023, 4), ('Statistika Terapan', 'Sari Wulandari', 2022, 5), ('Algoritma dan Struktur Data', 'Ahmad Fauzi', 2021, 1);
INSERT INTO peminjaman (anggota_id, buku_id, tanggal_pinjam, tanggal_kembali) VALUES (1, 1, '2025-03-01', '2025-03-15'), (1, 7, '2025-03-05', '2025-03-20'), (2, 3, '2025-03-10', NULL), (3, 5, '2025-02-20', '2025-03-01'), (2, 1, '2025-04-02', NULL), (4, 6, '2025-04-07', NULL), (5, 8, '2025-04-09', '2025-04-25'), (4, 2, '2025-05-01', NULL);
SQLDataset ini berisi lima kategori, lima anggota, delapan buku, dan delapan catatan peminjaman. Satu anggota tanpa alamat email dan beberapa peminjaman tanpa tanggal kembali disengaja sebagai bahan latihan nilai kosong pada modul jenis data.
Menjelajah dengan meta-command#
Meta-command adalah perintah milik psql sendiri yang diawali tanda garis miring terbalik dan tidak dikirim ke server sebagai SQL. Perintah \l mendaftar basis data, \dt mendaftar tabel pada basis data yang sedang terhubung, dan \d nama_tabel menampilkan struktur satu tabel. Meta-command tidak menunggu tanda titik koma, berbeda dengan pernyataan SQL yang baru dieksekusi setelah titik koma.
# lihat isi basis data yang sedang terhubung
psql -U postgres -d perpustakaan -c '\dt' List of relations
Schema | Name | Type | Owner
--------+------------+-------+----------
public | anggota | table | postgres
public | buku | table | postgres
public | kategori | table | postgres
public | peminjaman | table | postgres
(4 rows)Pola meta-command mudah ditebak, sehingga \l untuk basis data dan \dt untuk tabel dapat ditulis dengan pola tambahan. Meta-command juga menerima pola pencocokan, sehingga \l perpustakaan hanya menampilkan satu basis data tersebut alih-alih seluruh daftarnya.
Membaca struktur tabel#
Perintah \d nama_tabel adalah alat baca struktur yang paling sering dipakai. Keluarannya mencantumkan setiap kolom beserta tipenya dan keterangan tambahan seperti not null atau nilai default.
# tampilkan struktur tabel anggota
psql -U postgres -d perpustakaan -c '\d anggota' Table "public.anggota"
Column | Type | Collation | Nullable | Default
-----------+---------+-----------+----------+-------------------------------------
id | integer | | not null | nextval('anggota_id_seq'::regclass)
nama | text | | not null |
email | text | | |
bergabung | date | | not null |
aktif | boolean | | not null | true
Indexes:
"anggota_pkey" PRIMARY KEY, btree (id)
"anggota_email_key" UNIQUE CONSTRAINT, btree (email)
Referenced by:
TABLE "peminjaman" CONSTRAINT "peminjaman_anggota_id_fkey" FOREIGN KEY (anggota_id) REFERENCES anggota(id)Keluaran tersebut memuat informasi yang dibutuhkan sebelum menulis query, yaitu nama kolom persis seperti di server, tipenya, dan kolom mana yang boleh kosong. Nilai default nextval('anggota_id_seq'::regclass) menunjukkan id diisi otomatis oleh sequence, mekanisme yang dibahas pada modul definisi data.
Mode interaktif dan mode satu tembakan#
psql dipakai dalam dua mode. Mode interaktif menampilkan prompt perpustakaan=# dan menerima banyak perintah berurutan, cocok untuk menjelajah. Mode satu tembakan melalui -c menjalankan perintahnya, mencetak hasil, lalu keluar, sehingga cocok untuk otomatisasi dan untuk tutorial yang merekam keluarannya. Seluruh contoh di jalur ini memakai mode -c karena keluarannya dapat direproduksi.
Bantuan internal tersedia tanpa meninggalkan psql, yaitu \h nama_perintah_sql untuk sintaks pernyataan SQL dan \? untuk daftar meta-command. Keduanya menjadi rujukan tercepat saat mengikuti topik tersendiri.
Kesalahan umum#
Kesalahan pertama adalah mengira meta-command perlu diakhiri titik koma. Titik koma pada meta-command justru menjadi bagian argumennya dan dapat mengubah maknanya, sehingga \dt dan \d anggota ditulis tanpa titik koma. Kesalahan kedua adalah mengetik SQL tanpa titik koma pada mode interaktif, sehingga prompt hanya berpindah baris tanpa mengeksekusi apa pun.
Kesalahan ketiga adalah mencoba meta-command melalui alat klien lain seperti pgAdmin. Meta-command milik psql, bukan milik server, sehingga hanya dikenali di psql. Server mengenal SQL, sedangkan kenyamanan \d dan \l adalah lapisan klien.
Ringkasan#
- Meta-command psql diawali garis miring terbalik, tidak menunggu titik koma, dan tidak dikirim ke server sebagai SQL.
\lmendaftar basis data,\dtmendaftar tabel, dan\d nama_tabelmenampilkan struktur lengkap satu tabel.\djuga memperlihatkan keterangan penting, yaitu tipe, keterangan not null, default, dan index yang menopang kunci.- Mode
-cmenjalankan satu perintah lalu keluar sehingga setiap contoh pada jalur ini dapat direkam dan diulang.
Referensi#
- psql — PostgreSQL Documentation — Referensi lengkap meta-command dan opsi baris perintah psql.
- Accessing a Database — PostgreSQL Documentation — Bagian resmi tentang cara terhubung dan memilih basis data.
- The SQL Language — PostgreSQL Documentation — Pengantar SQL yang menjadi dasar modul-modul tersendiri.