안녕하세요. 가이아쓰리디 김태영입니다.
Postgresql에 관하여 생소하신듯 하여 추가적으로 몇가지 더 적어봅니다.
일반적으로 "데이터베이스 생성"은 말 그래도 새로 만든다고 생각하기 쉬우나, Postgresql에서는 약간 의미가 다릅니다.
생성(Create)가 아니라 복사(Copy)라고 이해하시는게 맞습니다.
"CREATE DATABASE EAIM_CATALOG TEMPLATE template_postgis" 구문은 template_postgis 라는 데이터베이스(TEMPLATE)를 복사하여 EAIM_CATALOG 데이터베이스를 생성하라는 의미입니다.
Postgresql에서 Template과 Database는 동일합니다.
database생성시 기존 database를 복사하는데, 기존 database가 새로 생성하는 database의 뼈대가 되므로 기존 database를 template이라고 지칭할 뿐입니다.
database를 복사할 때 기존 database가 변경되면 복사가 제대로 완료될 수 없는 가능성이 있기에 기존 database의 세션 유무를 확인(no session)하는 과정이 있습니다.
말씀하신 에러는 이부분에서 발생한 것입니다.
따라서 template_postgis database에 연결되어 있는 세션을 모두 끊어주시면, database생성이 가능합니다.
덧붙여 말씀드리자면,
postgresql 설치시 두개의 template(database)을 제공합니다. template0과 template1이 그것입니다.
(Pgadmin에서는 안보이게 되어있는데 실제로 존재합니다. select * from pg_database 로 확인할 수 있습니다.)
create database 구문에서 TEMPLATE 인자를 생략할 경우 template1이 적용됩니다.