UUID di Instalasi PostgreSQL

Posted in: Data  
Tags: PostgreSQL   Instalasi   UUID  
Author: Bambang Purnomosidi D. P. | | 6 minutes reading time

Update (22 Maret 2025):

  1. Melengkapi langkah instalasi
  2. Membetulkan beberapa typo
  3. Menggunakan versi terbaru PostgreSQL (17.4 - Maret 2025)

PostgreSQL adalah salah satu RDBMS yang dikembangkan sudah sejak lama (1996) dan menjadi basis pengembangan software-software lainnya (YugabyteDB, CockroachDB, EDB). Hampir semua distro Linux menyertakan PostgreSQL dalam distribusinya. Sistem operasi lain juga didukung. Artikel ini membahas sedikit tentang UUID dan kaitannya dengan instalasi PostgreSQL.

Pada PostgreSQL versi lama, UUID dihasilkan oleh pustaka yang dibuat oleh OSSP. Sayangnya, software yang dibuat oleh legenda open source Ralf Engelschall ini tidak dikembangkan lagi. Oleh karena itu, proses untuk menghasilkan UUID sebaiknya menggunakan pustaka lainnya. Secara umum, ada 3 pilihan yang bisa digunakan dalam parameter --with-uuid=LIB (ganti LIB dengan salah satu dari:

  1. ossp: menggunakan versi (obsolete) dari OSSP
  2. e2fs: menggunakan libuuid dari e2fsprogs.
  3. bsd: menggunakan fungsi dari BSD.

Artikel ini akan membahas instalasi PostgreSQL menggunakan libuuid. Untuk mengikuti langkah-langkah di sini, sila unduh source code dari PostgreSQL terlebih dahulu di https://www.postgresql.org/ftp/source/ (artikel ini menggunakan versi 7.4). Selain itu, siapkan direktori kosong yang akan digunakan sebagai tempat instalasi PostgreSQL.

  1. Unduh PostgreSQL
  2. Ekstrak hasil unduhan tersebut.
$ tar -xvf postgresql-17.4.tar.bz2
...
...
postgresql-17.4/src/tutorial/complex.source
postgresql-17.4/src/tutorial/funcs.c
postgresql-17.4/src/tutorial/funcs.source
postgresql-17.4/src/tutorial/syscat.source
$
  1. Masuk ke direktori hasil ekstrak:
$ cd postgresql-17.4
  1. Konfigurasi kompilasi

Saya menggunakan libuuid sehingga proses konfigurasi menjadi:

$ ./configure --prefix=/home/bpdp/software/dbms/postgresql-17.4 --with-uuid=e2fs
...
...
configure: using LDFLAGS=  -Wl,--as-needed
configure: creating ./config.status
config.status: creating GNUmakefile
config.status: creating src/Makefile.global
config.status: creating src/include/pg_config.h
config.status: creating src/include/pg_config_ext.h
config.status: creating src/interfaces/ecpg/include/ecpg_config.h
config.status: linking src/backend/port/tas/dummy.s to src/backend/port/tas.s
config.status: linking src/backend/port/posix_sema.c to src/backend/port/pg_sema.c
config.status: linking src/backend/port/sysv_shmem.c to src/backend/port/pg_shmem.c
config.status: linking src/include/port/linux.h to src/include/pg_config_os.h
config.status: linking src/makefiles/Makefile.linux to src/Makefile.port
$

Pada proses ini, mungkin terdapat beberapa paket yang diperlukan. Install paket yang diperlukan (misal: bison, flex, icu, dan lain-lain). Biasanya juga diperlukan instalasi package-devel atau package-dev (misal icu-devel, libicu-dev - tergantung distro yang digunakan. Khusus jika terdapat error semacam icu library not found padahal icu dan icu-devel/icu-dev sudah diinstall, berarti distro yang digunakan masih memerlukan paket pkg-config.

  1. Setelah itu lakukan proses kompilasi:
$ make
...
...
make[3]: Leaving directory '/home/bpdp/master/dbms/postgresql/postgresql-17.4/src/test/regress'
rm -f pg_regress.o && ln -s ../../../src/test/regress/pg_regress.o .
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -O2 isolation_main.o pg_regress.o -L../../../src/interfaces/libpq -lpq -L../../../src/port -L../../../src/common   -Wl,--as-needed -Wl,-rpath,'/home/bpdp/software/dbms/postgresql-17.0/lib',--enable-new-dtags  -lpgcommon -lpgport -lz -ledit -lm  -o pg_isolation_regress
make[2]: Leaving directory '/home/bpdp/master/dbms/postgresql/postgresql-17.4/src/test/isolation'
make -C test/perl all
make[2]: Entering directory '/home/bpdp/master/dbms/postgresql/postgresql-17.4/src/test/perl'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/bpdp/master/dbms/postgresql/postgresql-17.4/src/test/perl'
make[1]: Leaving directory '/home/bpdp/master/dbms/postgresql/postgresql-17.4/src'
make -C config all
make[1]: Entering directory '/home/bpdp/master/dbms/postgresql/postgresql-17.4/config'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/bpdp/master/dbms/postgresql/postgresql-17.4/config'
$
  1. Lakukan proses instalasi
$ make install
...
...
make[2]: Leaving directory '/home/bpdp/master/dbms/postgresql/postgresql-17.4/src/test/perl'
/usr/bin/mkdir -p '/home/bpdp/software/dbms/postgresql-17.0/lib/pgxs/src'
/usr/bin/install -c -m 644 Makefile.global '/home/bpdp/software/dbms/postgresql-17.0/lib/pgxs/src/Makefile.global'
/usr/bin/install -c -m 644 Makefile.port '/home/bpdp/software/dbms/postgresql-17.0/lib/pgxs/src/Makefile.port'
/usr/bin/install -c -m 644 ./Makefile.shlib '/home/bpdp/software/dbms/postgresql-17.0/lib/pgxs/src/Makefile.shlib'
/usr/bin/install -c -m 644 ./nls-global.mk '/home/bpdp/software/dbms/postgresql-17.0/lib/pgxs/src/nls-global.mk'
make[1]: Leaving directory '/home/bpdp/master/dbms/postgresql/postgresql-17.4/src'
mtoake -C config install
make[1]: Entering directory '/home/bpdp/master/dbms/postgresql/postgresql-17.4/config'
/usr/bin/mkdir -p '/home/bpdp/software/dbms/postgresql-17.0/lib/pgxs/config'
/usr/bin/install -c -m 755 ./install-sh '/home/bpdp/software/dbms/postgresql-17.0/lib/pgxs/config/install-sh'
/usr/bin/install -c -m 755 ./missing '/home/bpdp/software/dbms/postgresql-17.0/lib/pgxs/config/missing'
make[1]: Leaving directory '/home/bpdp/master/dbms/postgresql/postgresql-17.4/config'
$
  1. Membuat file untuk menyimpan env variables

Berikutnya, tetapkan lokasi direktori untuk data dan gunakan sebagai parameter dari pg_ctl untuk start maupun stop. Saya membuat alias berikut ini (Fish shell). Username, password, host, serta database boleh juga dimasukkan ke env variables:

$ cat ~/env/fish/dbms/postgresql/postgresql-17 
set PSQL_HOME $HOME/software/dbms/postgresql-17

set -x PATH $PSQL_HOME/bin $PATH
set -x LD_LIBRARY_PATH $PSQL_HOME/lib 
set -x PGDATA $HOME/software/dbms/17-data

set -x PGUSER bpdp
set -x PGPASSWORD merdeka
set -x PGHOST localhost
set -x PGPORT 5432
set -x PGDATABASE htap

alias startpsql="pg_ctl -l /tmp/logfile start"
alias stoppsql="pg_ctl stop"
$

Buat symlink:

$ cd ~/software/dbms/
$ ln -s postgresql-17.4 postgresql-17

Direktori data juga harus dibuat supaya env variables tersebut bisa digunakan:

$ cd ~/software/dbms/
$ mkdir 17-data
  1. Inisialisasi direktori data

Untuk bisa menggunakan alias tersebut, perlu dilakukan inisialisasi lsebih dahulu:

$ initdb ~/software/dbms/17-data/
The files belonging to this database system will be owned by user "bpdp".
This user must also own the server process.

The database cluster will be initialized with this locale configuration:
  locale provider:   libc
  LC_COLLATE:  C
  LC_CTYPE:    en_US.UTF-8
  LC_MESSAGES: en_US.UTF-8
  LC_MONETARY: en_US.UTF-8
  LC_NUMERIC:  en_US.UTF-8
  LC_TIME:     en_US.UTF-8
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /home/bpdp/software/dbms/17-data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default "max_connections" ... 100
selecting default "shared_buffers" ... 128MB
selecting default time zone ... Asia/Jakarta
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    pg_ctl -D /home/bpdp/software/dbms/17-data/ -l logfile start

$

Inisialisasi ini cukup dilakukan sekali saja, di awal saat akan menggunakan suatu direktori sebagai lokasi data. Kompilasi ini akan menghasilkan user dengan nama sesuai dengan user sistem operasi yang melakukan kompilasi.

  1. Mengaktifkan env variables

Setiap akan menggunakan PostgreSQL, pastikan sudah mengaktifkan env variables. Berikut adalah caranya, sekaligus mengaktifkan PostgreSQL server.

$ source ~/env/fish/dbms/postgresql/postgresql-17 
$ startpsql
waiting for server to start.... done
server started
$
  1. Membuat database
$ creatdb htap
$
  1. Akses database kemudian atur password
$ psql
psql (17.4)
Type "help" for help.

htap=# alter user bpdp with encrypted password 'merdeka';
ALTER ROLE
htap=#
\q
$
  1. Jika diperlukan, buat user khusus untuk database tersebut:
$ createuser htap_oltp_01
$ psql
psql (17.4)
Type "help" for help.

htap=# alter user htap_oltp_01 with encrypted password 'passoltp01';
ALTER ROLE
htap=#

Pada posisi ini, silakan dipertimbangkan akan mengatur env variables PGUSER dan PGPASSWORD atau tidak.

  1. Atur akses supaya semua menggunakan password. Lihat lokasi dari file konfigurasi.
htap=# show config_file;
                   config_file                    
--------------------------------------------------
 /home/bpdp/software/dbms/17-data/postgresql.conf
(1 row)

htap=#

Edit file /home/bpdp/software/dbms/17-data/pg_hba.conf

...
...
host    all             all             samehost                 password
local   all             all                                      password
host    all             all             127.0.0.1/32             password 

Restart PostgreSQL server:

stoppsql
waiting for server to shut down..... done
server stopped
$ startpsql
waiting for server to start.... done
server started
$

Coba akses menggunakan user baru:

$ psql -U htap_oltp_01 htap -h localhost
Password for user htap_oltp_01: 
psql (17.4)
Type "help" for help.

htap=>

Akan terlihat prompt yang muncul berbeda dengan superuser (bpdp). Jika user bpdp maka prompt =#, sementara kalau user biasa =>.

Pada posisi ini, instalasi dasar dari PostgreSQL telah selesai. Masih ada banyak yang perlu diperhatikan (misalnya hak akses), tetapi dari posisi ini, kira-kira bisa mulai dikerjakan berbagai optimasi. Selamat mencoba!