initdb — 새 PostgreSQL 데이터베이스 클러스터 만들기
initdb
[옵션
...] [ --pgdata
| -D
] 디렉터리
initdb
명령은
PostgreSQL 데이터베이스 클러스터를 새로
만드는데 사용한다. 데이터베이스 클러스터란 하나의
서버 인스턴스가 관리하는 일련의 데이터베이스 덩어리다.
하나의 데이터베이스 클러스터 만드는 작업은 지정한 디렉터리를 만들고,
특정 데이터에스에서 공용으로 사용하는 카탈로그 테이블들을 만들고,
template1
, postgres
데이터베이스를
만든다. 클러스터가 만들어진 다음 서버가 운영 중인 상태에서
새 데이터베이스를 만들면, template1
데이터베이스를
복사해서 만든다. (이렇게 해서, template1
데이터베이스의 내용과 똑 같은 새로운 데이터베이스가 만들어진다.)
postgres
데이터베이스는 사용자들이나,
응용 프로그램, 기타 제3제공자 응용 프로램에서 사용하는
기본 데이터베이스다.
initdb
명령은 지정한 디렉터리를 만드는
작업부터 진행하기 때문에, 만일 그 디렉터리가 없다면,
만들 디렉터리의 상위 디렉터리가 initdb
명령을 실행하는 사용자에게 쓰기 권한이 부여되어 있어야 한다.
이런 환경이 안된다면, root 권한으로 데이터베이스 클러스터
디렉터리를 만들고, 그 디렉터리를 chown
명령으로 initdb
명령을 실행할 사용자로
그 소유주를 바꾸어 사용할 수 있다. initdb
작업할 데이터베이스 클러스터 디렉터리는 비어 있어야 한다.
initdb
명령을 실행하는 OS 사용자와,
서버를 실행하는 OS 사용자는 반드시 같아야한다. initdb
명령에 의해서 만들어지는 디렉터리와 파일들을 서버가
사용하기 때문이다. 또한 서버 실행도, initdb
명령을 실행하는 것도 OS root 사용자는 할 수 없다. (보안상
실행 할 수 없다고 오류 메시지를 볼 것이다.)
initdb
명령은 데이터베이스 클러스터의 기본
인코딩도 지정한다. 이 작업에서는 문제 세트 인코딩,
문자 정렬 규칙(LC_COLLATE
), 문자 세트 종류(LC_CTYPE
, 예를 들어, 대문자, 소문자, 숫자)를 지정한다. 이 설정은
template1
데이터베이스에 지정하며,
이 데이터베이스를 복사해서 사용함으로 이 설정이 결국 앞으로 만들어질
모든 데이터베이스의 기본값이 된다.
물론 사용자는 이 설정을 --lc-collate
,
--lc-ctype
옵션으로 바꿀 수 있다. 문자 정렬 규칙이
C
또는 POSIX
가 아닌 경우,
데이터베이스 성능이 떨어질 수 있다(한국어에서는 LIKE 연산에서
인덱스를 사용하지 못하는 문제가 있다. - 옮긴이). 이런 이유로
initdb
명령을 사용할 때, 이 설정은 바르게
해야할 필요가 있다.
한국어 범용 옵션값은 --encoding=utf8 --lc-collate=C
--lc-ctype=ko_KR.UTF-8
이다. (ko_KR.UTF-8은 각
OS에서 사용할 수 있는 적당한 한국어 설정 값)
- 옮긴이
로케일 관련 설정은 서버가 실행되고 난 뒤에도 바꿀 수 있다.
--locale
옵션을 사용해서
문자 세트 관련 모든 설정을 한 번에 설정할 수도 있다. 이 경우는
lc_*
모든 설정을 해당 로케일로 지정한다.
(SHOW ALL
명령으로 확인 함.) 자세한 내용은
23.1절에서 다룬다.
인코딩 설정은 --encoding
옵션을 사용한다.
이 부분은 23.3절에서 자세히 다룬다.
-A 인증방법
--auth=인증방법
이 옵션은 로컬 사용자(유닉스 도메인 소켓 접속이나,
127.0.0.1 접속)에 대한 기본 인증 방법을 지정한다.
이 작업은 pg_hba.conf
파일에서
host
나 local
로 시작하는
줄에 대한 인증 방법이다.)
이 설정은 일반 접속과 복제용 접속 모두 해당된다.
서버가 운영 되고 있는 호스트에 데이터베이스 서버 관리자 외에
다른 OS 사용자도 해당 호스트를 접속한다면, trust
옵션은 보안상 위험하다. trust
옵션은
해당 서버가 운영 되고 있는 호스트로 OS 쉘 접속이 가능하다면,
그 모든 사용자들이 데이터베이스 서버에 접속할 수 있기 때문이다.
--auth-host=인증방법
이 옵션은 로컬 사용자가 TCP/IP 연결로 로컬 서버에
접속하는 인증 방법을 지정한다. (pg_hba.conf
파일에서
host
줄의 127.0.0.1 IP에 대한 설정이다.)
--auth-local=인증방법
이 옵션은 로컬 사용자가 유닉스 도메인 소켓 연결로 로컬 서버에
접속하는 인증 방법을 지정한다. (pg_hba.conf
파일에서
local
줄에 대한 설정이다.)
-D 디렉터리
--pgdata=디렉터리
이 옵션은 데이터베이스 클러스터 디렉터리를 지정한다.
이 옵션이 빠지면, PGDATA
환경 변수 값을
사용한다. 데이터베이스 서버(postgres
)에서도
이 옵션을 그대로 사용하며, 생략되면 이 환경 변수를 그대로
사용한다.)
-E 인코딩
--encoding=인코딩
템플릿 데이터베이스 인코딩을 지정한다. 이 설정은
향후 운영 중에 만들어지는 데이터베이스의 기본 인코딩으로 사용된다.
이 옵션이 빠지면, 쉘의 OS 로케일 설정을 기반으로 자동 선택하며,
로케일 설정이 없으면, SQL_ASCII
인코딩을
사용한다. PostgreSQL 서버에서
사용할 수 있는 문자 세트에 대한 설명은
23.3.1절에서 자세히 다루고 있다.
-k
--data-checksums
데이터 페이지가 깨졌는지를 검사하는 체크섬 값을 사용한다.
이 옵션을 지정하면, 검사 기능이 추가 되기 때문에
서버 성능은 떨어지나, 실시간 데이터 페이지 손상에 대한
오류를 바로 확인할 수 있다. 이 설정은 이 initdb
명령에서 딱 한 번 지정할 수 있으며, 이미 만들어진
데이터베이스 클러스터에 대해서는 이 설정을 바꿀 수 없다. 이
설정이 활성화되면, 모든 데이터베이스의 모든 개체에 대해서
체크섬 검사를 한다.
--locale=로케일
데이터베이스 클러스터의 기본 로케일 설정. 이 옵션이 없으면,
initdb
명령을 실행할 당시의
OS 로케일 설정에 따라 결정된다. 로케일에 대한 자세한 설명은
23.1절에서 다루고 있다.
--lc-collate=로케일
--lc-ctype=로케일
--lc-messages=로케일
--lc-monetary=로케일
--lc-numeric=로케일
--lc-time=로케일
--locale
옵션과 같은 일을 하는데,
이 옵션들은 로케일 가운데 각각 세부 설정 한다.
--no-locale
--locale=C
옵션과 같다.
-N
--no-sync
initdb
명령은 기본적으로 모든 파일 쓰기 작업을
하면, 그 파일에 대한 디스크 동기화(sync) 작업을 한다.
이 옵션은 이 sync 작업을 생략해서 명령 실행 시간을 단축한다.
물론 이 옵션을 사용하면, 갑작스런 서버 중지 사태가 발생하면,
자료 손실이 발생할 수 있다. 충분히 검토 한 뒤 사용해야 하며,
가급적 운영 환경에서는 사용하지 않는다.
--pwfile=파일이름
initdb
명령에서 사용할 데이터베이스 슈퍼유저
비밀번호를 지정한 파일에서 읽어 사용한다.
그 파일 첫 줄에 비밀번호가 있으면 된다.
-S
--sync-only
모든 데이터베이스의 모든 파일에 대해서 디스크 sync 작업만 수행한다. 이 옵션은 initdb 일반 작업은 진행하지 않는다.
-T config
--text-search-config=config
텍스트 검색 환경 설정 기본값 지정. default_text_search_config 참조.
-U 사용자이름
--username=사용자이름
데이터베이스 슈퍼유저 이름을 지정한다. 이 옵션을 사용하지 않으며,
initdb
명령을 실행하는 OS 사용자 이름과 같은
이름을 데이터베이스 슈퍼유저 이름으로 사용한다.
이 슈퍼유저 이름이 무엇이든간에 크게 상관은 없지만,
전통적으로 postgres를 사용하기 때문에,
OS 사용자가 이와 다를 경우 이 옵션을 사용하기도 한다.
(이렇게 initdb 명령을 실행하는 OS 사용자 이름과, 데이터베이스
슈퍼유저 이름이 다르면, 서버 관리를 꽤 귀찮아진다. initdb 명령을
실행할 OS 사용자를 postgres로 하는 것이 제일 편하다. - 옮긴이)
-W
--pwprompt
데이터베이스 슈퍼유저의 비밀번호를 initdb
명령을 실행하면 사용자가 직접 입력할 수 있도록한다.
인증 방법이 비밀번호 인증이 아닌 경우는 별 의미 없다.
이 옵션을 지정하고 입력한 비밀번호는 서버 사용자 인증을
비밀번호로 했을 때부터 바르게 작동한다.
-X 디렉터리
--waldir=디렉터리
미리-쓰기 로그를 저장한 디렉터리를 지정한다. (일반적으로 미리-쓰기 로그는 데이터 파일이 저장되는 파일 시스템과 다른 파일 시스템에 저장하는 것이 안정적인 서버 운영에 도움이 된다. - 옮긴이)
기타 잘 사용되지는 않지만, 다음 옵션도 사용할 수 있다:
-d
--debug
initdb
작업 과정을 보다 자세하게 보여준다.
개발자가 문제점 추적할 때 사용하는 옵션.
Print debugging output from the bootstrap backend and a few other
messages of lesser interest for the general public.
The bootstrap backend is the program initdb
uses to create the catalog tables. This option generates a tremendous
amount of extremely boring output.
-L 디렉터리
initdb
작업에 필요한 입력 파일들이 있는
위치를 지정한다. 일반적으로 사용하지 않는 옵션이다.
Specifies where initdb
should find
its input files to initialize the database cluster. This is
normally not necessary. You will be told if you need to
specify their location explicitly.
-n
--no-clean
initdb
명령은 작업을 실패하면,
모든 데이터베이스 클러스터 파일을 지운다. 이 옵션을 사용하면,
그 지우는 작업을 생략한다. 이렇게 해서 문제점 추적할 때
사용한다.
기타 옵션:
-V
--version
initdb 버전을 보여주고 마친다.
-?
--help
initdb 명령에서 사용할 수 있는 명령행 옵션에 대한 도움말을 보여주고 마친다.
PGDATA
-D
옵션을 지정하지 않았을 경우에
사용하는 데이터베이스 클러스터 디렉터리 이름.
TZ
지역 시간대 기본값. 이 값은 지역 시간대 이름이어야 한다(8.5.3절 참조).
이 프로그램은 libpq 라이브러리를 사용하는 여러 PostgreSQL 프로그램들과 마찬가지로, 이 라이브러리에서 사용하는 환경 변수를 그대로 사용할 수 있다(33.14절 참조).
initdb
명령은
pg_ctl initdb
명령으로도 호출 할 수 있다.