initdb

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 명령으로 클러스터 디렉터리를 만들 때, 그 접근권한은 그 소유주만 접근 할 수 있게 만든다. --allow-group-access 옵션을 사용해서, OS 같은 그룹 사용자들도 접근할 수 있도록 설정할 수 있다. 이 옵션은 서버 실행 사용자가 아닌 사용자가 데이터베이스 백업을 할 때 유용하게 사용할 수 있다.

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 파일에서 hostlocal로 시작하는 줄에 대한 인증 방법이다.) 이 설정은 일반 접속과 복제용 접속 모두 해당된다.

서버가 운영 되고 있는 호스트에 데이터베이스 서버 관리자 외에 다른 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절에서 자세히 다루고 있다.

-g
--allow-group-access

Allows users in the same group as the cluster owner to read all cluster files created by initdb. This option is ignored on Windows as it does not support POSIX-style group permissions.

-k
--data-checksums

데이터 페이지가 깨졌는지를 검사하는 체크섬 값을 사용한다. 이 옵션을 지정하면, 검사 기능이 추가 되기 때문에 서버 성능은 떨어지나, 실시간 데이터 페이지 손상에 대한 오류를 바로 확인할 수 있다. 이 설정이 활성화되면, 모든 데이터베이스의 모든 개체에 대해서 체크섬 검사를 한다. 모든 체크섬 검사 실패에 대한 정보는 pg_stat_database 뷰를 통해 확인 할 수 있다.

--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=디렉터리

미리-쓰기 로그를 저장한 디렉터리를 지정한다. (일반적으로 미리-쓰기 로그는 데이터 파일이 저장되는 파일 시스템과 다른 파일 시스템에 저장하는 것이 안정적인 서버 운영에 도움이 된다. - 옮긴이)

--wal-segsize=size

Set the WAL segment size, in megabytes. This is the size of each individual file in the WAL log. The default size is 16 megabytes. The value must be a power of 2 between 1 and 1024 (megabytes). This option can only be set during initialization, and cannot be changed later.

It may be useful to adjust this size to control the granularity of WAL log shipping or archiving. Also, in databases with a high volume of WAL, the sheer number of WAL files per directory can become a performance and management problem. Increasing the WAL file size will reduce the number of WAL files.

기타 잘 사용되지는 않지만, 다음 옵션도 사용할 수 있다:

-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 옵션을 지정하지 않았을 경우에 사용하는 데이터베이스 클러스터 디렉터리 이름.

PG_COLOR

Specifies whether to use color in diagnostic messages. Possible values are always, auto and never.

TZ

지역 시간대 기본값. 이 값은 지역 시간대 이름이어야 한다(8.5.3절 참조).

이 프로그램은 libpq 라이브러리를 사용하는 여러 PostgreSQL 프로그램들과 마찬가지로, 이 라이브러리에서 사용하는 환경 변수를 그대로 사용할 수 있다(33.14절 참조).

참고

initdb 명령은 pg_ctl initdb 명령으로도 호출 할 수 있다.

관련 항목

pg_ctl, postgres