😳 TableSpace
PostgreSQL은 하드 디스크 내부에 데이터베이스에 대한 모든 정보를 폴더와 파일의 형태로 저장하는데,
데이터베이스 객체(테이블, 인덱스 등)를 특정 디스크 위치에 저장하기 위해 사용하는 PostgreSQL의 기능을 TableSpace라고 함.
성능, 관리 효율성, 디스크 사용 최적화 등의 이점을 얻을 수 있음.
🤠 PostgreSQL의 데이터 저장 구조
데이터를 디스크에 저장할 때 다음과 같은 계층 구조를 가짐
- Cluster : PostgreSQL 인스턴스 전체를 의미. 하나의 디렉토리에 저장
- Database : 클러스터 내에서 여러 개의 데이터베이스 생성. 논리적으로 독립적
- Schema : 데이터베이스 내에서 스키마를 사용하여 테이블, 뷰, 함수 등을 그룹화.
- Table : 스키마 내에 테이블 생성. 실제 데이터 저장.
🤔 디스크에 저장되는 방식
데이터 디렉토리 ($PGDATA)
- 모든 데이터가 저장되는 공간.
SHOW data_directory;

데이터베이스별 디렉토리
- 데이터베이스는 base 디렉토리 아래에 고유한 디렉토리를 가짐.
- 데이터베이스마다 고유한 OID(Object Identifier)가 부여되며, 이 OID가 디렉토리 이름으로 사용됨.


테이블별 파일
- 각 테이블은 데이터베이스 디렉토리 내에서 별도의 파일로 저장됨. (raw data)
- 테이블마다 고유한 OID를 가지며, 이 OID가 파일 이름으로 사용됨.

- 파일의 내용은 DB에서 검색할 수 있음.
- index, sequence, primary key 등 정보 출력

스키마의 논리적 구분
스키마는 데이터베이스 내에서 구분하기 위한 개념이며, 디스크 상에서 스키마별로 별도의 디렉토리가 생성되진 않음. 같은 데이터베이스 내의 모든 테이블은 동일한 디렉토리 내에 저장됨.
😎 격리 수준
데이터베이스 간 격리
- PostgreSQL의 각 데이터베이스는 논리적으로 완전히 독립적
- 한 데이터베이스의 테이블을 다른 데이터베이스에서 직접 참조할 수 없음.
- 디스크 상에서도 별도의 디렉토리를 사용하여 물리적으로도 격리
스키마 간 격리
- 같은 데이터베이스 내의 스키마는 논리적으로만 구분
- 디스크 상에서 별도의 격리가 이루어지지 않으며, 같은 데이터베이스 디렉토리 내에 저장됨.
테이블 간 격리
- 같은 데이터베이스 내의 테이블 간 SQL 쿼리를 통해 자유롭게 참조 가능
- 그러나 디스크 상에서는 고유한 파일로 저장되므로 물리적으로 격리
😲 저장된 데이터의 형태
- $PGDATA 에 저장된 숫자 파일은 Heap File이라고 불리며 8KB의 페이지(Block)으로 구성됨.
- 테이블의 데이터가 많아지면 파일이 분할됨.