Tips Ngusilin Rekan Kantor di PostgreSQL Server
Pernah lihat isinya folder PGDATA di server Postgres? Normalnya, akan berisi kurang lebih seperti ini:
drwx------. 6 postgres postgres 4096 Jun 21 16:51 base
-rw-------. 1 postgres postgres 44 Jul 2 16:09 current_logfiles
drwx------. 2 postgres postgres 4096 Jul 2 16:09 global
drwx------. 2 postgres postgres 4096 Jul 2 16:09 log
drwx------. 2 postgres postgres 4096 Jun 21 16:45 pg_commit_ts
drwx------. 2 postgres postgres 4096 Jun 21 16:45 pg_dynshmem
-rw-------. 1 postgres postgres 4513 Jun 21 16:45 pg_hba.conf
-rw-------. 1 postgres postgres 1636 Jun 21 16:45 pg_ident.conf
drwx------. 4 postgres postgres 4096 Jul 2 16:10 pg_logical
drwx------. 4 postgres postgres 4096 Jun 21 16:45 pg_multixact
drwx------. 2 postgres postgres 4096 Jul 2 16:09 pg_notify
drwx------. 2 postgres postgres 4096 Jun 21 16:55 pg_replslot
drwx------. 2 postgres postgres 4096 Jun 21 16:45 pg_serial
drwx------. 2 postgres postgres 4096 Jun 21 16:45 pg_snapshots
drwx------. 2 postgres postgres 4096 Jul 2 16:10 pg_stat
drwx------. 2 postgres postgres 4096 Jul 2 16:10 pg_stat_tmp
drwx------. 2 postgres postgres 4096 Jun 21 18:56 pg_subtrans
drwx------. 2 postgres postgres 4096 Jun 21 16:45 pg_tblspc
drwx------. 2 postgres postgres 4096 Jun 21 16:45 pg_twophase
drwx------. 3 postgres postgres 4096 Jul 2 16:10 pg_wal
drwx------. 2 postgres postgres 4096 Jun 21 16:45 pg_xact
-rw-------. 1 postgres postgres 88 Jun 21 16:45 postgresql.auto.conf
-rw-------. 1 postgres postgres 24768 Jun 21 18:56 postgresql.conf
-rw-------. 1 postgres postgres 43 Jul 2 16:09 postmaster.opts
-rw-------. 1 postgres postgres 3 Jun 21 16:45 PG_VERSION
Hal pertama yang perlu diketahui adalah, JANGAN PERNAH menghapus file atau folder apapun yang ada di sini, KECUALI dalam folder log (di versi 11+) atau pg_log (di versi sebelumnya), tak terkecuali folder pg_xlog.
Nah, tahukah kamu bahwa file PG_VERSION ini memiliki peran yang penting? Meski isinya cuma versi Postgres, kalau dalam contoh ini isinya cuma “11”, tapi tanpa file ini postgres tidak akan mau berjalan.
Jadi, beginilah cara ngusilin rekan kantor.
Anggap saja kita tak tahu dimana lokasi PGDATA. Tapi, kita tahu bagaimana cara login ke server. Maka, masuklah dengan psql
dan cari tahu di mana letak lokasi PGDATA.
paijo@server $ psql -U postgres -d postgres
psql (11.3)
Type "help" for help.
postgres=# show data_directory;
data_directory
───────────────────────
/var/lib/pgsql/data
postgres=# SELECT current_user;
current_user
──────────────
postgres
Oh, kita bisa login ke server postgres dengan user postgres. Cool!
Tahukah kamu bahwa kita bisa melakukan aktivitas di level operating system melalui psql? Yup! Dengan menggunakan awalan \!
postgres=# \! ls /var/lib/pgsql/data/PGVERSION
/var/lib/pgsql/data/PGVERSION
Selanjutnya, mari kita matikan postgres dan rename PG_VERSION menjadi file lain, PGVERSION:
$ pg_ctl -D /var/lib/pgsql/data stop
$ mv /var/lib/pgsql/data/PG_VERSION /var/lib/pgsql/data/PGVERSION
$ ls /var/lib/pgsql/data/PGVERSION
/var/lib/pgsql/data/PGVERSION
Nah, sudah selesai.
$ pg_ctl -D /var/lib/pgsql/data start
pg_ctl: directory "/var/lib/pgsql/data" is not a database cluster directory
Ketika rekan kerjanya ngecek server dan ternyata mati, maka dia akan berusaha menyalakannya. Tapi tidak berhasil dengan error di atas. Ketika dicek, semua datanya masih komplit dan lengkap. Kecuali, ada yang berbeda dengan nama PGVERSION, padahal seharusnya PG_VERSION.
Dan, kita bisa tertawa ngikik di belakang.
Judul asli: Pentingnya File PG_VERSION di PostgreSQL Server