서버 인프라/DB

template database "template1" does not exist 에러 해결하기

트리맨스 2022. 11. 21. 21:45
반응형

 

실수로 postgres의 기본 db를 지워버렸다. 그 이후에 새 db를 만들려고 하니 자꾸 아래와 같은 오류가 나왔다.

template database "template1" does not exist

 

알고보니 postgresql은 db를 수동으로 새로 만들때 템플릿이 있어야 하는 것 같았다. 그래서 기존의 template0, template1 db를 다시 살려야 하는 상황에 왔다. 구글에 검색하니 템플릿 데이터베이스를 따로 만들수 있다고 한다. 아래 명령어를 치니 템플릿이 새로 생성되었다.

 

create database template0 TEMPLATE postgres;
update pg_database set datistemplate=true  where datname='template0';

 

확인하니 기본 템플릿이 0과 1, 두개가 있었다. 둘의 차이가 궁금해서 확인해보니 조금 있드라.

 

template1

  • 기본값으로 create database 하면 이놈을 복사한다.
  • template1에 개체를 추가하면 다음에 create database할때 개체가 기본값으로 추가됨 (Perl 포함)
  • 인코딩, locale 정보 포함가능

template0

  • template1과 동일한 데이터
  • pg_database.datistemplate = false값이다. 즉, db클러스터 초기화 이후 template0을 변경할 수 없다. 슈퍼유저 또는 db 소유자만 복제 가능
  • 인코딩, locale 정보가 없을수 있다.

 

결론은 postgres를 로컬 및 인스턴스에서 직접 설치해서 사용할 경우, 기본적으로 생기는 template0(1) 은 ALTER는 자유롭게 해도 되나 특별한 이유가 없으면 DROP하지 않는 것이 좋을 것 같다.

 

참고자료

https://stackoverflow.com/questions/27992560/template0-and-template1-database-dropped-accidently

 

template0 and template1 database dropped accidently

I did not know that template0 and template1 database templates are required in order to create empty databases. I deleted them in order to clear up postgres. Now I'm not able to create any new data...

stackoverflow.com

https://www.postgresql.org/docs/current/manage-ag-templatedbs.html

 

23.3. Template Databases

23.3. Template Databases CREATE DATABASE actually works by copying an existing database. By default, it copies the standard system database named …

www.postgresql.org

 

반응형