반응형
실수로 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
https://www.postgresql.org/docs/current/manage-ag-templatedbs.html
반응형
'서버 인프라 > DB' 카테고리의 다른 글
Slow query 개선 경험기 (0) | 2024.10.30 |
---|---|
Postgres 자연어 검색하기 (1) | 2023.11.18 |
RDS Postgresql 로컬에서 실행하기 (0) | 2022.09.27 |
[Prisma] Can't reach database server at `db` 에러 해결하기 (IN 연산 관련) (0) | 2022.02.26 |
Postgresql DB의 인덱싱 알고리즘 (0) | 2021.12.26 |