PostgreSQL 서버 설치하고 나면 필수로 먼저 initdb라는 걸 해줘야 하는데 첨엔 이게 뭔가 싶다. 물론 무지성으로 가이드 보고 따라해도 db 사용하는데 큰 문제는 없지만 뭔지 알고 하면 postgresql에 대해 조금이라도 더 알게 된다.
initdb
postgresql에서 initdb는 초기화 기능을 담당하는 프로그램이다. initdb를 실행함으로써 postgresql을 사용할 수 있는 환경을 만들어 준다.
실행은 그냥 간단하게
/usr/pgsql-12/bin/initdb

psql의 bin 디렉터리에 있는 initdb를 실행하면 된다. 물론 목적에 따라 여러 가지 옵션을 지정할 수도 있다. 근데 옵션 없이 써도 문제 없이 실행된다.
initdb 실행 결과
1. initdb를 실행하면 pg_hba.conf, postgresql.conf 같은 설정 파일을 생성한다.
2. 기본 데이터베이스인 postgres, template0, template1를 생성한다. 이 데이터베이스는 얼핏 아무 의미가 없어보일 수도 있는데 실은 다른 데이터베이스를 생성해서 사용하더라도 영향을 주는 데이터베이스다.

3. postgresql의 데이터가 쌓일 디렉터리를 지정한다. 따로 지정하지 않으면
/var/lib/pgsql/12/data/base
이쪽 경로에 db 사용 데이터가 쌓인다.
왜 수동으로 실행하게 만들었을까?
어차피 무조건 거쳐야되는 과정인 거면 그냥 서버 설치하면서 자동으로 진행되도록 해도 될텐데 왜 귀찮게 수동으로 initdb 작업을 하게 하는 걸까 하는 생각은 든다. mysql이나 mariadb 보면 그냥 설치하자마자 바로 쓸 수 있지 않나.
아무래도 사용자가 데이터 저장 디렉터리나 인코딩 같은 걸 처음부터 지정할 수 있는 자유도가 있고 이런 식으로 직접 초기화를 하면서 postgresql을 더 이해해봐라 하는 취지일 거 같다.