PostgreSQL:CreateDatabase
CREATE DATABASE — create a new database
Synopsis
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ LOCALE [=] locale ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace_name ]
[ ALLOW_CONNECTIONS [=] allowconn ]
[ CONNECTION LIMIT [=] connlimit ]
[ IS_TEMPLATE [=] istemplate ] ]
Template Database
CREATE DATABASE
는 실제로 기존 데이터베이스를 복사한다. 기본적으로 template1이라는 표준 시스템 데이터베이스를 복사한다. 따라서 해당 데이터베이스는 새 데이터베이스를 만드는 "템플릿"이다. 객체를 template1에 추가하면, 이 객체는 나중에 생성된 사용자 데이터베이스로 복사된다. 이 작업은 데이터베이스의 표준 객체 집합에 대한 사이트-로컬 수정을 가능하게 한다. 예를 들면, template1에서 프로시저 언어 PL/Perl을 설치하는 경우 해당 데이터베이스를 생성할 때 추가적인 작업 없이 사용자 데이터베이스가 자동으로 사용 가능하게 된다.
template0이라는 2차 표준 시스템 데이터베이스가 있다. 이 데이터베이스에는 template1의 초기 내용과 동일한 데이터가 포함되어 있다. 즉, PostgreSQL 버전에 의해 사전 정의된 표준 객체만 포함되어 있다. 데이터베이스 클러스터를 초기화한 후에는 template0을 절대 변경하면 안 된다. template1 대신 template0을 복사하도록 CREATE DATABASE를 실행하면 template1에서 사이트-로컬 추가가 없는 "처녀" 사용자 데이터베이스를 생성할 수 있다. 이것은 pg_dump 덤프를 복원할 때 특히 유용하다. 나중에 template1에 추가되었을 수도 있는 객체와 충돌 없이 덤프된 데이터베이스를 올바르게 재생성 하도록 처녀 데이터베이스에서 덤프 스크립트를 복원해야 한다.
template1 대신 template0을 복사하는 일반적인 다른 이유는, template1의 복사는 동일한 설정을 사용해야 하지만 template0을 복사하는 경우에는 새 인코딩 및 로케일(locale) 설정을 지정할 수 있기 때문이다. template1은 인코딩 또는 로케일(locale)에 관한 데이터를 포함하지만 template0은 그렇지 않다.
template0을 복사하여 데이터베이스를 생성하려면 :
See also
Favorite site
- PostgreSQL: Documentation: 13: CREATE DATABASE
- PostgreSQL: Documentation: 9.5: Character Set Support