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