Yogyakarta, Indonesia Hostinger Partner

Perintah dan Flag psql Terpenting yang Perlu Anda Ketahui di PostgreSQL

Ibil S Widodo · 13 menit baca
Perintah dan Flag psql Terpenting yang Perlu Anda Ketahui di PostgreSQL

Ada satu alat yang hampir selalu terbuka di terminal para pengguna PostgreSQL. Namanya psql. Alat ini kecil, cepat, dan tidak butuh antarmuka grafis. Banyak orang memakainya bertahun-tahun tanpa pernah menggali kemampuannya. Padahal perintah psql dan flag psql yang tepat bisa menghemat berjam-jam kerja.

Artikel ini membahas yang paling penting saja. Kita mulai dari cara terhubung ke server. Lalu kita bahas flag untuk menjalankan query dan skrip. Setelah itu kita masuk ke meta-command yang diawali garis miring terbalik. Di akhir, ada tips agar psql terasa seperti alat yang dibuat khusus untuk Anda.

Baca dari atas ke bawah jika Anda baru memulai. Lompat ke bagian tertentu jika Anda hanya butuh penyegaran.

Apa Itu psql dan Mengapa Layak Dikuasai

psql adalah klien baris perintah resmi untuk PostgreSQL. Ia ikut terpasang bersama paket PostgreSQL di hampir semua sistem operasi. Dengan psql, Anda bisa mengetik SQL, melihat hasilnya, dan mengelola database dari satu jendela terminal.

Mengapa tidak cukup memakai alat grafis? Jawabannya sederhana. Server produksi sering hanya bisa diakses lewat SSH. Di sana tidak ada layar grafis. Yang ada hanya terminal dan psql.

Ada alasan kedua. psql mudah diotomatisasi. Anda bisa memasukkannya ke skrip shell, pipeline CI, atau tugas cron. Alat grafis tidak bisa melakukan itu dengan elegan.

Alasan ketiga adalah kecepatan. Setelah hafal beberapa perintah psql, Anda bisa menjelajahi struktur database dalam hitungan detik. Tidak perlu klik sana-sini.

Perlu dicatat satu hal sejak awal. Ada dua jenis instruksi di psql. Yang pertama adalah perintah SQL biasa, seperti SELECT dan CREATE TABLE. Perintah ini harus diakhiri titik koma. Yang kedua adalah meta-command, yaitu perintah milik psql sendiri. Meta-command selalu diawali \ dan tidak butuh titik koma.

Flag psql untuk Menghubungkan ke Server PostgreSQL

Sebelum menjalankan apa pun, Anda harus terhubung. Di sinilah flag koneksi berperan. Flag ini menentukan server mana yang dituju, siapa Anda, dan database apa yang dibuka.

Flag koneksi dasar

Berikut flag yang paling sering dipakai:

  • -h atau --host menentukan alamat server.
  • -p atau --port menentukan port. Nilai bawaannya 5432.
  • -U atau --username menentukan nama pengguna.
  • -d atau --dbname menentukan nama database.
  • -W memaksa psql meminta kata sandi.
  • -w melarang psql meminta kata sandi.

Contoh paling umum terlihat seperti ini:

psql -h localhost -p 5432 -U admin -d toko

Perintah itu terhubung ke server lokal. Penggunanya admin. Databasenya toko.

Jika Anda menjalankan psql tanpa flag, ia memakai nilai bawaan. Nama pengguna akan sama dengan nama pengguna sistem operasi Anda. Nama database akan sama dengan nama pengguna. Server yang dituju adalah soket lokal.

Memakai connection string

Ada cara yang lebih ringkas. Anda bisa memberikan satu string koneksi berbentuk URI.

psql "postgresql://admin@db.contoh.com:5432/toko?sslmode=require"

Format ini sangat berguna di layanan cloud. Penyedia database biasanya memberi Anda string seperti itu. Cukup salin, tempel, dan Anda terhubung.

Mengelola kata sandi dengan aman

Mengetik kata sandi tiap kali memang merepotkan. Menaruhnya di perintah juga berbahaya. Riwayat shell menyimpan semuanya.

Ada dua cara yang lebih baik. Cara pertama adalah variabel lingkungan PGPASSWORD. Cara kedua adalah berkas ~/.pgpass. Berkas ini menyimpan kredensial per server dengan format host:port:database:user:password. Pastikan izinnya 0600. Jika tidak, psql akan mengabaikannya.

Pilih ~/.pgpass untuk penggunaan sehari-hari. Variabel lingkungan lebih cocok untuk skrip sementara.

Mengecek koneksi yang sedang aktif

Setelah terhubung, Anda mungkin lupa sedang berada di mana. Ketik \conninfo. psql akan menampilkan database, pengguna, host, dan port yang sedang dipakai.

Ini kebiasaan kecil yang menyelamatkan banyak orang. Menjalankan DELETE di database produksi karena mengira sedang di database uji adalah kesalahan klasik. Satu perintah singkat bisa mencegahnya.

Flag psql untuk Menjalankan Query dan Skrip SQL

Sekarang kita pindah ke kegunaan psql yang paling kuat. Bukan mode interaktif, melainkan mode non-interaktif. Di sini Anda menjalankan SQL langsung dari baris perintah.

Flag -c untuk satu perintah

Flag -c menjalankan satu string perintah, lalu keluar.

psql -d toko -c "SELECT count(*) FROM pesanan;"

Hasilnya langsung tercetak di terminal. Tidak ada sesi yang tertinggal. Cocok untuk pengecekan cepat.

Flag -f untuk menjalankan berkas

Bagaimana jika SQL Anda panjang? Simpan di berkas. Lalu jalankan dengan -f.

psql -d toko -f migrasi.sql

Flag ini adalah tulang punggung migrasi database. Anda juga bisa memakainya untuk memulihkan cadangan berformat SQL biasa.

Flag -1 agar semuanya atomik

Bayangkan skrip migrasi dengan dua puluh perintah. Perintah ke-15 gagal. Tanpa perlindungan, empat belas perintah sebelumnya sudah terlanjur berjalan. Database Anda berada di kondisi setengah jadi.

Flag -1 atau --single-transaction mengatasi masalah ini. Ia membungkus seluruh berkas dalam satu transaksi. Jika ada yang gagal, semuanya dibatalkan.

psql -d toko -1 -f migrasi.sql

Sayangnya, psql tetap melanjutkan eksekusi setelah error secara bawaan. Karena itu, flag ini sebaiknya dipasangkan dengan variabel ON_ERROR_STOP.

Variabel ON_ERROR_STOP

Variabel ini menghentikan psql begitu terjadi error pertama. Anda mengaturnya dengan flag -v.

psql -d toko -v ON_ERROR_STOP=1 -1 -f migrasi.sql

Kombinasi ini sangat saya sarankan untuk setiap skrip otomatis. Skrip berhenti saat gagal. Transaksi dibatalkan. Kode keluar psql tidak nol, sehingga pipeline CI Anda tahu ada yang salah.

Flag -v untuk variabel

Flag -v tidak hanya untuk ON_ERROR_STOP. Anda bisa mengirim variabel apa saja ke dalam skrip.

psql -d toko -v tahun=2026 -f laporan.sql

Di dalam laporan.sql, Anda memanggil variabel itu dengan :tahun. Jika nilainya berupa teks, pakai :'tahun' agar otomatis diberi tanda kutip yang aman. Ini jauh lebih rapi daripada menyusun string SQL dengan tangan.

Flag psql untuk Mengatur Format Output

Hasil query sering perlu dipakai ulang. Mungkin dikirim ke berkas, dibaca skrip lain, atau dibuka di spreadsheet. psql punya beberapa flag untuk keperluan ini.

Output tanpa hiasan

Secara bawaan, psql mencetak tabel yang cantik. Ada garis, header, dan jumlah baris di bawahnya. Itu enak dibaca manusia. Tapi merepotkan untuk mesin.

Gunakan kombinasi berikut untuk output bersih:

  • -t atau --tuples-only membuang header dan footer.
  • -A atau --no-align mematikan perataan kolom.
  • -F mengatur pemisah kolom, misalnya -F ','.
  • -q menyembunyikan pesan tambahan.
psql -d toko -t -A -c "SELECT count(*) FROM pesanan;"

Outputnya hanya satu angka. Tanpa spasi berlebih. Anda bisa langsung menyimpannya ke variabel shell.

Output CSV

Untuk CSV, versi psql modern sudah menyediakan jalan pintas.

psql -d toko --csv -c "SELECT * FROM pelanggan;" > pelanggan.csv

Flag --csv mengurus tanda kutip dan pemisah dengan benar. Hasilnya siap dibuka di spreadsheet.

Flag -o untuk menyimpan ke berkas

Jika Anda ingin psql menulis hasil ke berkas tanpa pengalihan shell, pakai -o.

psql -d toko -o hasil.txt -c "SELECT * FROM produk;"

Flag -x untuk tampilan diperluas

Pernah melihat tabel dengan puluhan kolom? Layarnya jadi kacau. Barisnya terpotong dan sulit dibaca.

Flag -x mengubah tampilan menjadi vertikal. Setiap kolom menempati satu baris. Nama kolom ada di kiri, nilainya di kanan. Di sesi interaktif, Anda bisa melakukan hal yang sama dengan meta-command \x.

Flag -H untuk HTML

Ada juga -H. Flag ini mencetak hasil sebagai tabel HTML. Berguna untuk laporan sederhana yang ingin Anda kirim lewat surel.

Flag -X agar konfigurasi tidak dibaca

Skrip yang berjalan di banyak mesin bisa berperilaku berbeda. Penyebabnya sering berkas ~/.psqlrc milik tiap pengguna. Flag -X membuat psql melewatkan berkas itu. Hasilnya lebih konsisten dan mudah diprediksi.

Meta-Command psql untuk Menjelajahi Database

Sampai di sini kita sudah membahas flag. Sekarang masuk ke bagian yang paling sering Anda pakai setiap hari. Meta-command psql adalah perintah yang diketik di dalam sesi interaktif. Semuanya diawali garis miring terbalik.

Bantuan dan keluar

Mulailah dari yang paling dasar.

  • \? menampilkan daftar semua meta-command.
  • \h menampilkan bantuan untuk perintah SQL. Contohnya \h CREATE INDEX.
  • \q keluar dari psql.

Jangan remehkan \h. Sintaks lengkap tiap perintah SQL ada di sana. Anda tidak perlu membuka browser.

Melihat dan berpindah database

Setelah masuk, pertanyaan pertama biasanya sederhana. Database apa saja yang ada?

  • \l menampilkan semua database di server.
  • \l+ menambahkan ukuran dan keterangan lain.
  • \c nama_db berpindah ke database lain tanpa keluar dari psql.
  • \c nama_db nama_user berpindah sekaligus mengganti pengguna.

Perintah \c sangat praktis. Satu sesi bisa dipakai untuk mengunjungi banyak database.

Melihat tabel dan strukturnya

Ini kelompok meta-command yang paling sering dipakai.

  • \dt menampilkan daftar tabel.
  • \d nama_tabel menampilkan kolom, tipe data, indeks, dan constraint tabel itu.
  • \d+ nama_tabel menambahkan informasi lebih rinci, seperti ukuran dan storage.
  • \dt+ menampilkan daftar tabel lengkap dengan ukurannya.

Saat Anda mewarisi database yang asing, mulailah dari \dt. Lalu pilih satu tabel dan jalankan \d. Dalam dua menit Anda sudah punya gambaran besar skemanya.

Perintah ini juga menerima pola. Ketik \dt pesanan* untuk melihat semua tabel yang namanya diawali pesanan. Tanda bintang bekerja sebagai wildcard.

Melihat objek lain

Tabel bukan satu-satunya objek di PostgreSQL. Meta-command lain membantu Anda melihat sisanya.

  • \dn menampilkan daftar skema.
  • \dv menampilkan view.
  • \di menampilkan indeks.
  • \ds menampilkan sequence.
  • \df menampilkan fungsi.
  • \dx menampilkan ekstensi yang terpasang.
  • \du menampilkan role dan pengguna.
  • \db menampilkan tablespace.

Polanya mudah diingat. Huruf d berarti describe. Huruf berikutnya menunjukkan jenis objeknya.

Ada dua tambahan yang berguna. Perintah \dp atau \z menampilkan hak akses suatu tabel. Perintah \sf nama_fungsi menampilkan kode sumber fungsi. Keduanya sering menyelamatkan Anda saat debugging masalah izin atau logika.

Meta-Command psql untuk Bekerja Lebih Efisien

Menjelajahi database baru separuh cerita. Separuh lainnya adalah bekerja dengan nyaman. Berikut meta-command yang membuat sesi psql terasa jauh lebih ringan.

Mengukur waktu dengan \timing

Ketik \timing. Sejak saat itu, psql mencetak durasi setiap query. Ketik sekali lagi untuk mematikannya.

Ini cara tercepat untuk membandingkan dua versi query. Tambahkan indeks. Jalankan ulang. Lihat selisih waktunya.

Tampilan diperluas dengan \x

Meta-command \x sudah kita singgung di bagian flag. Di sesi interaktif, ia berfungsi sebagai tombol sakelar. Satu opsi lain patut dicoba, yaitu \x auto. Dengan opsi ini, psql memilih sendiri tampilan vertikal hanya ketika baris terlalu lebar untuk layar.

Mengedit query di editor dengan \e

Query panjang sulit diketik di terminal. Satu salah ketik, dan Anda harus mengulang dari awal.

Meta-command \e membuka query terakhir di editor teks Anda. Setelah disimpan dan ditutup, psql langsung menjalankannya. Editor yang dipakai mengikuti variabel lingkungan EDITOR atau PSQL_EDITOR. Untuk fungsi, ada \ef nama_fungsi.

Menjalankan berkas dengan \i

Di dalam sesi, Anda juga bisa menjalankan berkas SQL.

\i /jalur/ke/skrip.sql

Versi \ir memakai jalur relatif terhadap berkas yang sedang berjalan. Ini membantu saat satu skrip memanggil skrip lain.

Menyimpan hasil dengan \o

Meta-command \o hasil.txt mengalihkan semua output berikutnya ke berkas. Ketik \o tanpa argumen untuk kembali ke layar.

Cocok saat Anda ingin menyimpan hasil beberapa query berturut-turut tanpa keluar dari sesi.

Perintah shell dengan !

Terkadang Anda perlu menjalankan perintah sistem. Tidak perlu keluar dulu. Ketik \! ls atau \! pwd. psql menjalankan perintah itu lalu kembali ke sesi.

Mengulang query dengan \watch

Meta-command ini sering terlewat. Padahal sangat berguna.

Setelah menjalankan sebuah query, ketik \watch 5. psql akan mengulang query itu setiap lima detik. Anda bisa memantau tabel pg_stat_activity atau jumlah baris yang terus bertambah, tanpa perlu mengetik ulang.

Riwayat dan koreksi

Tekan panah atas untuk memanggil perintah sebelumnya. Itu bawaan. Selain itu, \s menampilkan seluruh riwayat perintah. \g menjalankan ulang buffer query terakhir. Variasi \g berkas.txt mengirim hasilnya ke berkas.

Mengimpor dan Mengekspor Data dengan \copy

Memindahkan data masuk dan keluar tabel adalah pekerjaan rutin. psql menyediakan \copy untuk itu.

Kemiripannya dengan perintah SQL COPY memang besar. Namun ada perbedaan penting. COPY berjalan di sisi server dan membaca berkas dari disk server. \copy berjalan di sisi klien dan membaca berkas dari komputer Anda. Untuk server yang dikelola layanan cloud, Anda hampir selalu butuh \copy.

Contoh ekspor ke CSV:

\copy pelanggan TO 'pelanggan.csv' WITH (FORMAT csv, HEADER)

Contoh impor dari CSV:

\copy pelanggan FROM 'pelanggan.csv' WITH (FORMAT csv, HEADER)

Anda juga bisa mengekspor hasil query, bukan seluruh tabel.

\copy (SELECT * FROM pesanan WHERE total > 1000000) TO 'besar.csv' WITH (FORMAT csv, HEADER)

Perhatikan satu hal. \copy harus ditulis dalam satu baris. Meta-command tidak mengenal baris lanjutan.

Variabel dan Pengaturan Tampilan di psql

Pada titik ini Anda sudah menguasai dasar-dasarnya. Sekarang kita bahas fitur yang membedakan pengguna biasa dari pengguna mahir.

Variabel dengan \set

psql punya variabel sendiri. Anda mengatur dengan \set dan memakainya dengan awalan titik dua.

\set batas 10
SELECT * FROM produk LIMIT :batas;

Seperti sudah disebut tadi, :'nama' memberi tanda kutip otomatis. Sedangkan :"nama" memperlakukan nilainya sebagai identifier, misalnya nama tabel.

Menyimpan hasil query ke variabel

Meta-command \gset mengambil hasil query satu baris dan menjadikan tiap kolomnya variabel. Anda bisa menyimpan hasil, lalu memakainya di query berikutnya. Ini membuka pintu ke skrip yang sangat dinamis.

Ada saudaranya yang lebih kuat, yaitu \gexec. Perintah ini menjalankan setiap nilai hasil query sebagai SQL baru. Anda bisa membuat query yang menghasilkan puluhan perintah ALTER TABLE, lalu mengeksekusinya sekaligus.

Mengatur tampilan dengan \pset

Meta-command \pset mengubah cara psql mencetak hasil. Beberapa pengaturan yang berguna:

  • \pset null '(kosong)' menampilkan nilai NULL sebagai teks yang jelas.
  • \pset pager off mematikan pager. Hasil panjang tidak lagi terhenti di tengah layar.
  • \pset format aligned atau \pset format csv mengganti format output.

Nilai NULL yang tampak seperti string kosong sering membingungkan. Pengaturan pertama menyelesaikan masalah itu dengan satu baris.

Mengganti password dengan \password

Jangan pernah mengetik ALTER ROLE ... PASSWORD '...' di terminal. Kata sandi akan tercatat di riwayat dan mungkin di log server. Gunakan \password nama_user. psql meminta kata sandi tanpa menampilkannya. Ia juga mengenkripsinya sebelum dikirim ke server.

Mengatur psql Lewat Berkas ~/.psqlrc

Setiap kali psql dimulai, ia mencari berkas ~/.psqlrc. Jika ada, isinya dijalankan otomatis. Di sinilah Anda menanam kebiasaan favorit.

Contoh isi yang masuk akal:

\set QUIET 1
\timing on
\x auto
\pset null '(kosong)'
\set HISTSIZE 5000
\set ON_ERROR_ROLLBACK interactive
\set QUIET 0

Baris QUIET di awal dan akhir membuat psql tidak berisik saat memuat konfigurasi. Sisanya mengaktifkan pengukur waktu, tampilan otomatis, penanda NULL yang jelas, dan riwayat yang lebih panjang.

Pengaturan ON_ERROR_ROLLBACK interactive layak mendapat perhatian khusus. Saat Anda berada dalam transaksi dan salah mengetik satu perintah, transaksi tidak langsung gugur. Hanya perintah yang salah itu yang dibatalkan. Anda bisa memperbaikinya dan melanjutkan.

Untuk menyesuaikan tampilan prompt, ada variabel PROMPT1 dan PROMPT2. Banyak orang menambahkan nama database dan status transaksi di prompt. Dengan begitu, Anda selalu tahu sedang berada di mana.

Ringkasan Flag dan Meta-Command psql yang Wajib Diingat

Agar mudah dicari kembali, berikut ringkasan yang bisa Anda tandai.

Flag psql terpenting

Flag Fungsi
-h, -p, -U, -d Host, port, pengguna, dan database
-c Menjalankan satu perintah lalu keluar
-f Menjalankan berkas SQL
-1 Membungkus eksekusi dalam satu transaksi
-v Mengatur variabel, termasuk ON_ERROR_STOP
-t, -A, -F Output tanpa hiasan, tanpa perataan, dengan pemisah kustom
--csv Output berformat CSV
-x Tampilan vertikal
-o Menyimpan output ke berkas
-X Melewatkan berkas ~/.psqlrc

Meta-command psql terpenting

Perintah Fungsi
\? dan \h Bantuan psql dan bantuan SQL
\l dan \c Daftar database dan berpindah database
\dt dan \d Daftar tabel dan detail struktur
\dn, \dv, \di, \df, \du, \dx Skema, view, indeks, fungsi, role, ekstensi
\x Tampilan diperluas
\timing Mengukur durasi query
\e Mengedit query di editor
\i Menjalankan berkas SQL
\o Mengalihkan output ke berkas
\copy Impor dan ekspor data dari sisi klien
\watch Mengulang query secara berkala
\set dan \pset Variabel dan pengaturan tampilan
\conninfo Info koneksi saat ini
\q Keluar

Perintah psql dan flag psql yang kita bahas di sini bukan daftar lengkap. Dokumentasi resmi PostgreSQL memuat jauh lebih banyak. Tapi daftar ini sudah cukup untuk menutup sebagian besar kebutuhan harian.

Mulailah dari yang kecil. Hafalkan \dt, \d, \x, dan \timing. Lalu biasakan memakai -v ON_ERROR_STOP=1 -1 -f untuk setiap skrip. Dua kebiasaan itu saja sudah membuat pekerjaan Anda lebih aman dan lebih cepat.

Setelah itu, tambahkan satu kebiasaan baru setiap minggu. Coba \watch. Coba \copy. Buat ~/.psqlrc pertama Anda. Dalam sebulan, psql akan terasa seperti perpanjangan tangan Anda sendiri.

Dan itulah inti dari menguasai PostgreSQL lewat terminal. Bukan menghafal semuanya. Melainkan tahu perintah mana yang tepat pada saat yang tepat.

Jika kamu ingin belajar soal MySQL, kamu juga bisa membaca artikel berikut ini Panduan Lengkap Mengelola Tabel dan Data di phpMyAdmin dari Nol Hingga Mahir

Bagikan WhatsApp LinkedIn X Facebook

Punya website yang ingin dibenahi atau dikembangkan? Ceritakan kebutuhan Anda, kami bantu petakan langkahnya.

Konsultasi gratis