22.1. 개요

롤, 데이터베이스, 테이블스페이스 같이 자료량이 적은 객체들은 클러스터 수준에서 정의되며, pg_global 테이블스페이스에 저장된다. 그 클러스터 안에는 여러개의 데이터베이스가 있으며, 각각 독립된 객체들을 다루며, 클러스터 수준의 객체들도 함께 다룰 수 있다. 각 데이터베이스 안에는 여러개의 스키마가 있으며, 각 스키마 안에는 테이블, 함수 같은 객체들을 포함한다. 따라서 전체 구조는, 클러스터, 데이터베이스, 스키마, 테이블(또는 함수 같이 종류가 다른 일부 객체)로 구성된다.

데이터베이스 서버에 한 클라이언트가 접속할 때, 그 연결 정보 가운데 반드시 데이터베이스 이름을 지정해야한다. 하나의 연결은 하나의 데이터베스 연결을 뜻하기에, 하나의 연결로 여러 데이터베이스를 동시에 접속할 수 없다. 데이터베이스 수준 보안은 두가지로 구성된다: 하나는 접근 제어이며 (20.1절 참고), 다른 하나는 연결 수준 차원에서 인증 제어(5.7절 참고)로 권한 부여, 회수 시스템을 말한다. 외부 자료 싸개 (postgres_fdw 참조)는 다른 데이터베이스나 다른 클러스터 안에 있는 객체들을 참조할 수 있는 방법을 제공한다. dblink 모듈 (dblink 참조)도 이와 같은 일을 하나, 옛날 방식이다. 기본값은 모든 사용자는 모든 연결 방법을 사용해서 모든 데이터베이스에 접속할 수 있다.

하나의 PostgreSQL 서버 클러스터 안에서, 서로 다른 사용자, 서로 다른 프로젝트, 서로 다른 객체들을 사용하는 경우라면, 데이터베이스 분리를 하고, 그에 맞는 인증과 접근 제어를 사용하는 것을 권장한다. 한편, 프로젝트나 사용자가 서로 연관이 되고, 같은 데이터베이스 내에서 자료를 공유하는 경우라면, 스키마로 각 객체들을 분리해서, 네임스페이스 단위 독립성을 보장하면서 그에 맞는 적당한 권한 설정을 할 것을 권장한다. 스키마 관리에 대한 자세한 설명은 5.9절에서 다룬다.

하나의 클러스터 안에 여러 데이터베이스를 사용하는 경우에는, 이 때문에 발생하는 위험과 한계들 보다 이득이 더 많는지를 잘 따져봐야한다. 특히, WAL(29장 참고)를 공유하기에, 백업과 복구 관련 옵션들이 공유된다. 각 데이터베이스를 사용하는 사용자 관점에서는 각 데이터베이스가 독립성을 가지지만, 데이터베이스 관리자 관점에서는 통합된 하나의 관리 객체가 된다.

데이터베이스는 CREATE DATABASE 명령(22.2절 참조)으로 생성되고 DROP DATABASE 명령(22.5절 참조)으로 소멸된다. 서버 내 어떤 데이터베이스가 있는지 살펴보려면 pg_database 시스템 카탈로그를 조회한다. 예를 들면,

SELECT datname FROM pg_database;

psql 프로그램의 \l 내장 명령 및 -l 명령줄 옵션도 기존 데이터베이스를 나열하는 데 유용하다.

참고

SQL 표준은 데이터베이스를 카탈로그라고 부르지만 실제로는 차이가 없다.