이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 22 장. 윈 토토 관리버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

6 장. 토토 캔 관리

토토 캔는 SQL 객체의 이름이 지정된 모음입니다 ("토토 캔 개체"). 일반적으로 모든 토토 캔 객체 (테이블, 기능 등)는 하나만에 속합니다. 데이터 베이스. (그러나 몇 가지 시스템 카탈로그가 있습니다. 예를 들어pg_database, 그것은 전체에 속합니다 설치하고 내의 각 토토 캔에서 액세스 할 수 있습니다 설치.) 토토 캔에 연결하는 응용 프로그램 서버는 연결 요청에 이름을 지정합니다. 연결하려는 토토 캔. 액세스 할 수 없습니다 연결 당 하나 이상의 토토 캔. (그러나 응용 프로그램은 아닙니다 연결 횟수로 제한되어 동일하거나 기타 토토 캔.)

참고 : SQL전화 토토 캔"카탈로그"이지만 있습니다 실제로는 차이가 없습니다.

토토 캔를 만들거나 삭제하기 위해PostgreSQL PostmasterUP가 진행되어야합니다 (참조사설 토토 사이트 : 문서 : 7.2 : 데이터베이스 서버 시작).

6.1. 토토 캔 생성

토토 캔는 쿼리 언어 명령으로 작성됩니다토토 캔 만들기:

토토 캔 생성이름

여기서이름평소를 따릅니다 SQL 식별자에 대한 규칙. 현재 사용자가 자동으로 새 데이터베이스의 소유자가됩니다. 그것은 특권입니다 나중에 제거 할 데이터베이스의 소유자 (또한 다른 개체를 제거합니다. 소유자).

토토 캔 생성은 제한된 작업입니다. 보다섹션 7.1.1허가를 부여하는 방법.

부트 스트랩 :연결해야하므로 토토 캔 서버를 실행하려면토토 캔 생성명령에 따라 질문이 남아 있습니다 어떻게첫 번째주어진 사이트의 데이터베이스를 생성 할 수 있습니다. 첫 번째 데이터베이스 항상에 의해 만들어집니다.initdb데이터 저장 영역이 초기화 될 때 명령. (보다PostgreSQL : 문서 : 7.2 : 롤 토토 클러스터 만들기.) 컨벤션이 토토 캔는라고합니다.Template1. 그래서 첫 번째를 만들려면"Real"연결할 수있는 토토 캔Template1.

이름"Template1"is no 사고 : 새 토토 캔가 만들어지면 템플릿 토토 캔 본질적으로 복제됩니다. 이것은 당신이하는 모든 변화를 의미합니다Template1모든 사람에게 전파됩니다 이후에 토토 캔가 생성되었습니다. 이것은 당신이해야한다는 것을 의미합니다 실제 작업을 위해 템플릿 토토 캔를 사용하지 않지만 사용시 신중 하게이 기능은 편리 할 수 ​​있습니다. 자세한 내용이 나타납니다 아래에.

추가 편의성으로서, 당신은 또한 프로그램도 있습니다. 새 토토 캔를 만들기 위해 쉘에서 실행할 수 있습니다.createb.

createbdbname

createb마법은 없습니다. 연결됩니다 Template1 데이터베이스 및 발행토토 캔 생성명령, 정확히 설명대로 위에. 사용합니다.PSQL내부적으로 프로그램. 참조 페이지createb호출 세부 정보가 포함되어 있습니다. 메모 저것createb어떤 주장도없이 현재 사용자 이름으로 데이터베이스를 만듭니다. 당신이 원하는 것이 아닙니다.

6.1.1. 템플릿 데이터베이스

토토 캔 생성실제로 작동합니다 기존 데이터베이스 복사. 기본적으로 복사합니다 표준 시스템 데이터베이스 이름Template1. 따라서 토토 캔는입니다."템플릿"토토 캔가 만들어집니다. 에 객체를 추가하면template1,이 객체가 복사됩니다 이후에 사용자 토토 캔를 작성했습니다. 이 동작은 허용합니다 표준 객체 세트에 대한 사이트-로컬 수정 토토 캔. 예를 들어, 절차를 설치하는 경우 언어PLPGSQLinTemplate1자동으로 사용할 수 있습니다 추가 작업을 수행 할 수없는 사용자 토토 캔에서 해당 토토 캔가 만들어졌습니다.

두 번째 표준 시스템 토토 캔가 있습니다Template0. 이 토토 캔에는 포함됩니다 의 초기 내용과 동일한 데이터template1, 즉 표준 객체 만 귀하의 버전으로 사전 정의PostgreSQL. Template0후에는 변경되지 않아야합니다initdb. 지시토토 캔 생성복사Template0대신Template1, 당신은 a를 만들 수 있습니다."Virgin"아무것도 포함하지 않는 사용자 토토 캔 의 사이트-로컬 추가template1. 이것은 특히 편리합니다 a 복원pg_dump덤프 : 덤프 버진 토토 캔에서 스크립트를 복원하여 하나는 덤핑 된 토토 캔의 올바른 내용을 재현하고 지금 존재할 수있는 추가와의 충돌없이 안에template1.

추가 템플릿 데이터베이스를 만들 수 있습니다. 그리고 실제로 설치에있는 데이터베이스를 복사 할 수 있습니다. 이름을 템플릿으로 지정토토 캔 생성. 이해하는 것이 중요합니다. 그러나 이것은 (아직) 일반 목적으로 의도 된 것은 아닙니다"데이터베이스 복사"시설. ~ 안에 특히 소스 데이터베이스가 유휴 상태 인 것이 필수적입니다. 기간 동안 (데이터 변경 트랜잭션 없음) 복사 작업의.생성 데이터 베이스백엔드 프로세스가 없는지 확인합니다 자체)는 시작시 소스 데이터베이스에 연결됩니다. 작동이지만 변경 사항을 보장하지는 않습니다 사본이 진행되는 동안 만들 수 없으므로 일관되지 않은 복사 데이터베이스. 따라서 우리는 그것을 권장합니다 템플릿으로 사용되는 데이터베이스는 읽기 전용으로 취급됩니다.

두 개의 유용한 플래그가 있습니다pg_database각 토토 캔의 경우 :datistemplateanddatallowconn. datistemplatea 토토 캔는 템플릿으로 의도되어 있습니다.토토 캔 생성. 이 플래그가 설정되면 토토 캔는 모든 사용자가 복제 할 수 있습니다.createb특권; 설정되지 않은 경우에만 슈퍼업자와 토토 캔 소유자는이를 복제 할 수 있습니다. 만약에DatallowConn거짓이면 새롭지 않습니다 해당 데이터베이스에 대한 연결은 허용됩니다 (그러나 존재합니다 깃발을 거짓으로 설정하여 세션은 단순히 죽지 않습니다). 그만큼Template0토토 캔는 일반적으로입니다 두드러진datallowconn=거짓수정을 방지합니다. 둘 다Template0andTemplate1항상 표시되어야합니다datistemplate=True.

템플릿 토토 캔를 준비하거나 변경 한 후 하나에게, 공연하는 것이 좋습니다진공 동결또는진공 충전 꼭 매달리게 하다해당 토토 캔에서. 이것이있을 때 완료된 경우 동일한 토토 캔에서 다른 공개 트랜잭션은 없습니다. 토토 캔의 모든 튜플이임을 보장합니다."Frozen"트랜잭션 ID 랩 어라운드 문제. 이것은 특히입니다 가질 토토 캔에 중요합니다datallowconn거짓으로 설정되어 있기 때문입니다 일상적인 유지 보수를 할 수 없습니다진공이러한 토토 캔에서. 보다섹션 8.2.3자세한 내용은

참고 : template1andTemplate0아무것도 없습니다 이름을 넘어서 특별 상태template1는 기본 소스 데이터베이스입니다 이름토토 캔 생성와 다양한 스크립트의 경우 기본 토토 캔 간 연결 처럼createb. 예를 들어, 하나 떨어질 수 있습니다Template1및 에서 재현Template0악영향없이. 이 행동 과정이 될 수 있습니다 부주의하게 쓰레기를 부주의하게 추가 한 경우template1.

6.1.2. 대안 위치

다른 위치에 토토 캔를 만들 수 있습니다. 설치의 기본 위치보다. 기억하십시오 모든 토토 캔 액세스는 토토 캔 서버를 통해 발생합니다 지정된 모든 위치는 서버에서 액세스 할 수 있어야합니다.

대체 데이터베이스 위치는 An에 의해 참조됩니다 환경 변수 의도 된 스토리지 위치. 이 환경 변수는 있어야합니다 서버의 환경에 존재하므로 서버가 시작되기 전에 정의됩니다. (따라서 세트 사용 가능한 대체 위치가 사이트 아래에 있습니다 관리자의 통제; 일반 사용자는 변경할 수 없습니다.) 유효한 환경 변수 이름을 사용하여 참조 할 수 있습니다. 대체 위치, 변수 이름을 사용하지만 접두사pgdata혼란과 다른 변수와의 충돌을 피하십시오.

서버 환경에서 변수를 작성하려면 프로세스 먼저 서버를 종료하고 정의해야합니다. 변수, 데이터 영역을 초기화하고 마지막으로 다시 시작하십시오 섬기는 사람. (보다PostgreSQL :and사설 토토 사이트 : 문서 : 7.2 : 데이터베이스 서버 시작.) 환경 변수를 설정하려면 유형

pgdata2 =/home/postgres/data
수출 pgdata2
Bourne Shells, 또는
setenv pgdata2/home/postgres/data
inCSH또는TCSH. 당신은 이것을 확인해야합니다 환경 변수는 항상 서버에서 정의됩니다 환경, 그렇지 않으면 액세스 할 수 없습니다 데이터 베이스. 그러므로 당신은 아마 어떤 종류로 그것을 설정하고 싶을 것입니다 쉘 시작 파일 또는 서버 시작 스크립트.

데이터를 작성하려면 의 저장 영역pgdata2포함 된 디렉토리 (여기,/home/postgres) 이미 존재하고 있습니다 서버를 실행하는 사용자 계정에서 쓸 수 있습니다 (참조섹션 3.1). 그 다음에 명령 줄에서

Initlocation pgdata2
그러면 서버를 다시 시작할 수 있습니다.

새 위치 내에서 토토 캔를 만들려면 명령

토토 캔 생성이름위치 = '위치'

여기서위치is 사용한 환경 변수,pgdata2이 예에서. 그만큼createb명령 옵션이 있습니다-d이것 목적.

대체 위치에서 생성 된 데이터베이스에 액세스 할 수 있습니다 다른 데이터베이스처럼 떨어졌습니다.

참고 :지정할 수도 있습니다 직접 절대 경로생성 데이터 베이스환경을 정의하지 않고 명령 변수. 이것은 기본적으로 허용되지 않습니다 보안 위험. 허용하려면 컴파일해야PostgreSQLC 전 처리기와 함께 매크로allow_absolute_dbpaths정의. 이를 수행하는 한 가지 방법은 컴파일을 실행하는 것입니다. 다음과 같은 단계 :

gmake cppflags = -dallow_absolute_dbpaths 모두