-
phppgAdmin에서 postgreSQL 데이터베이스 복사하기 & 에러 처리프로그래밍/DB 2018. 2. 20. 17:27728x90반응형
phpPgAdmin 에서 create database를 선택하여
postgresSQl 데이터베이스를 복사하려고 하였다.
create 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은 그렇지 않다.
(참고링크)기존 데이터베이스를 복사하는 것이기 때문에 기존 데이터베이스의 이름을 선택했다.
그런데 아래와 같은 에러 메세지가 나왔다 -_-;
ERROR: source database "ERROR: source database "db1" is being accessed by other users
DETAIL: There are 6 other sessions using the database.db1" is being accessed by other users
ERROR: source database "dbname" is being accessed by other users
DETAIL: There are 6 other sessions using the database.
복사하려는 데이터베이스에 접속해있는 세션이 있을 때는 복사가 안되나 보다 ; - ;
sudo ps aux | grep dbname
걍 db 이름으로 검색해서 프로세스 id로 하나하나 다 죽이고 다시 복사하니
정상적으로 데이터베이스가 복사 되었다.
sudo kill -9 < your process id >
참고링크: https://stackoverflow.com/questions/14374726/postgresql-cant-create-database-operationalerror-source-database-template
728x90반응형'프로그래밍 > DB' 카테고리의 다른 글
postgresql 의 반올림 함수들 (0) 2018.03.11 postgreSQL 데이터 디렉토리 변경 (0) 2018.03.02 Waiting for table metadata lock 대처방법 (0) 2017.12.25 mysql int 타입 최대/최소 값 (0) 2017.10.01 mysql 두 개의 테이블 데이터 사용하기 예시들 (0) 2017.09.30