1.3. 데이터베이스 만들기

데이터베이스 서버를 사용할 수 있는지를 확인하기 위한 테스트로 먼저 하나의 데이터베이스를 만들어 보겠습니다. 각각의 사용자 단위나, 프로젝트 단위로 데이터베이스를 분리해서 작업하는 것이 일반적이기에, 하나의 PostgreSQL 서버는 많은 데이터베이스를 관리할 수 있습니다.

어쩌면, 이미 시스템 관리자가 일반 사용자들을 위해서 그들이 사용할 수 있는 데이터베이스를 미리 만들어 두었을 수도 있습니다. 이런 경우라면, 시스템 관리자가 일반 사용자들에게 그 사실을 알려서 사용할 수 있는 데이터베이스 이름을 알려주어야겠지요. 이렇게 이미 만들어진 데이터베이스가 있고, 그것의 이름이 어떤 것인지 알고 있다면, 이 섹션을 읽지 않고 넘어가셔도 좋습니다.

예를 들어 mydb라는 이름의 새로운 데이터베이스를 만드려면, 다음과 같은 명령을 사용합니다:

$ createdb mydb

정상적인 결과라면 다음과 같이 나타납니다:

CREATE DATABASE

직접 해본 결과가 위 메시지와 같다면, 그냥 이 섹션을 넘어가세요.

createdb: command not found

이런 메시지가 나타났다면, PostgreSQL 패키지가 정성적으로 설치 되지 않은 경우이거나 사용자의 실행 경로 환경변수(PATH)에 이 PostgreSQL 설치 경로가 포함되어있지 않은 경우입니다. 이것을 알기 위해서는 일단 다음과 같이 절대경로로 다시 한번 호출해 봅니다:

$ /usr/local/pgsql/bin/createdb mydb

위 명령에서의 절대 경로는 각 시스템마다 다를 수 있습니다. 정확히 알기 위해서는 시스템 관리자에게 문의해 보든지, 직접 설치했다면, 실치 과정을 다시 살펴보든지 하세요.

이 명령의 또 다른 결과로 다음과 같은 메시지가 보일 수 있습니다:

createdb: postgres 데이터베이스에 연결 할 수 없음: 서버에 연결할 수 없음: 그런 파일이나 디렉터리가 없음
        로컬호스트에 서버가 가동 중인지,
        "/tmp/.s.PGSQL.5432" 유닉스 도메인 소켓 접근이 가능한지 살펴보십시오.

이 경우는 현재 시스템에는 PostgreSQL 서버가 가동중이지 않다는 것을 의미합니다. 다시 한번 설치, 서버 실행 관련 문서를 살펴보거나, 시스템 관리자에게 자문을 구해보십시오.

또 다른 오류 메시지로,

createdb: postgres 데이터베이스에 연결 할 수 없음: FATAL:  role "joe" does not exist

이 경우는 사용자 계정의 이름이 데이터베이스 사용자로 등록되어있지 않은 경우입니다. (PostgreSQL에서는 데이터베이스 사용자로 특별히 지정하지 않았을 경우, 기본값으로 시스템 사용자 이름을 사용합니다.) 직접 데이터베이스를 관리한다면, 사용자 추가에 관계된 문서인 21장을 읽어 보십시오. 기본적으로 PostgreSQL 설치는 postgres 사용자로 진행되며, 이 계정이 데이터베이스 시스템 관리자가 됩니다. 또한 PostgreSQL 사용자와 시스템 사용자 이름 서로 다를 경우, -U 옵션을 사용해서 데이터베이스 사용자 이름을 지정하거나, PGUSER 시스템 환경변수로 그 이름을 지정해서 사용할 수 있습니다.

한편, 데이터베이스 사용자로 등록은 되어있으나, 데이터베이스를 만들 권한이 없는 경우는 다음과 같이 나타납니다:

createdb: 데이터베이스 만들기 실패: 오류:  데이터베이스를 만들 권한이 없음

모든 사용자가 데이터베이스를 만들 수 있는 것은 아닙니다. 만일 PostgreSQL에서 데이터베이스를 만들고 싶다면, 데이터베이스 관리자에게 해당 사용자에게 데이터베이스를 만들 수 있는 권한을 달라고 요청해야할 것입니다. 자신이 관리자라면, 해당 사용자에게 권한을 부여해 주어야합니다. 직접 설치했다면, 그 설치하고, 가동한 시스템 사용자 계정이 데이터베이스 관리자가 됩니다. [1]

물론 데이터베이스 이름은 아무거나 다른 이름을 사용해도 괜찮습니다. PostgreSQL에서는 만들 수 있는 데이터베이스 개수 제한이 없습니다. 하지만, 데이터베이스 이름은 첫글자가 영문 알파벳이어야하며 길이는 최대 63 바이트까지 입니다. 데이터베이스 이름으로 가장 편하게 사용할 수 있는 이름은 그 데이터베이스를 만드는 사용자의 이름과 같은 것입니다. 왜냐하면 많은 프로그램들이 이 사용자와 같은 이름의 데이터베이스 이름을 그 사용자의 기본 데이터베이스로 가정하기 때문입니다. 이런 식으로 사용자의 이름과 같은 데이터베이스를 만들려면, 아래와 같은 명령을 이용하면 됩니다. 간편하지요.

$ createdb

만든 데이터베이스를 더 이상 사용할 일이 없으면, 데이터베이스를 삭제할 수 있습니다. 예를 들어 mydb 데이터베이스를 만든 사람이 그 데이터베이스를 삭제하려면, 다음과 같은 명령을 사용합니다:

$ dropdb mydb

(dropdb 명령은 그 인자가 없어도 기본으로 삭제할 데이터베이스를 사용자 이름가 같은 데이터베이스를 삭제하지는 않습니다. 삭제할 데이터베이스 이름을 반드시 지정해 주어야합니다) 이 작업은 해당 데이터베이스와 관련된 모든 파일들을 물리적으로 완전히 삭제하는 것입니다. 그러기에 실행취소 할 수 없습니다. 이 작업을 할 때는 반드시 신중을 기하십시오.

createdb, dropdb 명령의 자세한 정보는 createdb, dropdb 설명서를 참조 하십시오.



[1] 사용자 이름에 대한 부가 설명을 하면, PostgreSQL 서버의 사용자와 시스템 사용자는 엄격히 다릅니다. 구체적으로 설명하면, 데이터베이스를 만들거나 사용할 수 있는 사용자가 꼭 시스템 사용자로 존재해야하는 것도 아니며, 특정 시스템 사용자가 반드시 PostgreSQL 서버의 사용자로 존재해야할 이유도 없습니다. 단지 PostgreSQL 프로그램들은 해당 데이터베이스를 사용하기 위한 사용자를 지정할 때, 기본적으로 현재 사용중인 시스템 사용자의 이름을 이용합니다. 만일 사용자가 없다거나, 해당 사용자의 권한이 부당한 오류 메시지를 만난다면, 그것은 데이터베이스의 사용자에 대한 이야기입니다. 이 사용자를 바꾸려면, -U 옵션으로 지정할 수 있습니다.