데이터베이스 만들기
데이터베이스 만들기 (Creating a Database)
데이터베이스 서버에 접근할 수 있는지 확인하는 첫 번째 테스트가 바로 데이터베이스를 만들어 보는 거예요. 실행 중인 PostgreSQL 서버는 여러 개의 데이터베이스를 관리할 수 있어요. 보통은 프로젝트마다, 또는 사용자마다 별도의 데이터베이스를 하나씩 두고 사용해요.
만약 사이트 관리자가 이미 여러분이 사용할 데이터베이스를 만들어 두었다면, 이 단계는 건너뛰고 다음 절로 넘어가면 돼요.
명령줄에서 데이터베이스 만들기
명령줄에서 mydb라는 새 데이터베이스를 만들려면 다음 명령을 실행해요.
$ createdb mydb
이 명령이 아무 응답도 없이 조용히 끝나면 성공한 거예요. 이 경우 이 절의 나머지 부분은 건너뛰어도 돼요.
문제 1: createdb: command not found
아래와 비슷한 메시지가 나온다면:
createdb: command not found
PostgreSQL이 제대로 설치되지 않았다는 뜻이에요. 아예 설치되지 않았거나, 셸의 검색 경로(search path)에 PostgreSQL이 포함되지 않은 경우죠. 이럴 땐 절대 경로로 명령을 호출해 보세요.
$ /usr/local/pgsql/bin/createdb mydb
여러분 사이트의 경로는 다를 수 있어요. 상황을 바로잡으려면 사이트 관리자에게 문의하거나 설치 지침을 확인해 보세요.
문제 2: 서버에 연결할 수 없다
다음과 같은 응답이 나올 수도 있어요.
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
이 메시지는 서버가 시작되지 않았거나, createdb가 접속을 기대하는 위치에서 서버가 리슨(listen)하고 있지 않다는 뜻이에요. 역시 설치 지침을 확인하거나 관리자에게 문의하세요.
문제 3: 사용자 역할이 없다
이런 응답도 가능해요.
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "joe" does not exist
(여기서는 여러분의 실제 로그인 이름이 등장할 거예요.) 이는 관리자가 아직 여러분을 위한 PostgreSQL 사용자 계정을 만들어 주지 않았다는 뜻이에요. (참고로 PostgreSQL 사용자 계정은 운영체제 사용자 계정과는 별개예요.) 만약 여러분이 관리자라면 계정을 만드는 방법은 Chapter 21. Database Roles를 참고하세요. 첫 사용자 계정을 만들려면 PostgreSQL이 설치된 운영체제 사용자(보통 postgres)로 로그인해야 해요. 또한 여러분에게 배정된 PostgreSQL 사용자 이름이 운영체제 사용자 이름과 다를 수도 있는데, 그럴 때는 -U 스위치를 쓰거나 PGUSER 환경 변수를 설정해서 PostgreSQL 사용자 이름을 지정하면 돼요.
문제 4: 권한이 없다
사용자 계정은 있지만 데이터베이스를 만들 권한이 없다면 이런 메시지가 나와요.
createdb: error: database creation failed: ERROR: permission denied to create database
모든 사용자가 새 데이터베이스를 만들 권한을 가지는 건 아니에요. PostgreSQL이 데이터베이스 생성을 거부한다면 사이트 관리자가 여러분에게 데이터베이스 생성 권한을 부여해 줘야 해요. 이 경우 관리자에게 문의하세요. 만약 PostgreSQL을 직접 설치했다면, 이 튜토리얼을 진행하는 동안 서버를 시작한 그 사용자 계정으로 로그인해서 사용해야 해요.
왜 이렇게 되는 걸까? (작은 설명)
PostgreSQL 사용자 이름은 운영체제 사용자 계정과 분리되어 있어요. 데이터베이스에 연결할 때 어떤 PostgreSQL 사용자 이름으로 연결할지 선택할 수 있는데, 따로 지정하지 않으면 현재 운영체제 계정과 같은 이름으로 기본 설정돼요. 그리고 우연하게도, 서버를 시작한 운영체제 사용자와 이름이 같은 PostgreSQL 사용자 계정은 항상 존재하고, 그 사용자는 항상 데이터베이스 생성 권한을 갖게 돼요. 그래서 그 사용자로 로그인하는 대신, 어디서든 -U 옵션을 지정해서 연결할 PostgreSQL 사용자 이름을 선택할 수도 있어요.
데이터베이스 이름을 다양하게 만들기
다른 이름으로도 데이터베이스를 만들 수 있어요. PostgreSQL은 한 사이트에 원하는 만큼 많은 데이터베이스를 만들 수 있게 해 줍니다. 데이터베이스 이름은 알파벳으로 시작해야 하고, 최대 63바이트 길이로 제한돼요. 편리한 선택은 현재 사용자 이름과 같은 이름의 데이터베이스를 만드는 거예요. 많은 도구들이 그 이름을 기본값으로 가정하므로 타이핑을 아낄 수 있어요. 그 데이터베이스를 만들려면 그냥 이렇게 입력하면 돼요.
$ createdb
데이터베이스 삭제하기
더 이상 사용하지 않는 데이터베이스는 제거할 수 있어요. 예를 들어 mydb의 소유자(만든 사람)라면 다음 명령으로 삭제할 수 있어요.
$ dropdb mydb
(이 명령에서는 데이터베이스 이름이 사용자 계정 이름으로 기본 설정되지 않으니, 항상 이름을 직접 지정해야 해요.)
이 작업은 데이터베이스와 관련된 모든 파일을 물리적으로 제거하며 되돌릴 수 없으니, 신중하게 생각한 뒤에만 실행해야 해요.
createdb와 dropdb에 대한 더 자세한 내용은 공식 문서의 createdb와 dropdb 페이지에서 각각 확인할 수 있어요.
더 알아보기 (Learn more)
- 1.2. 아키텍처 기본 (Architectural Fundamentals) — 이전 단계
- 1.4. 데이터베이스 접근하기 (Accessing a Database) — 다음 단계
- createdb (SQL 명령 레퍼런스) —
createdb공식 문서 - dropdb (SQL 명령 레퍼런스) —
dropdb공식 문서 - Chapter 21. Database Roles — 사용자 역할 관리