하나의 PostgreSQL 서버가 관리하는 데이터베이스들의 모음
=> 호스트 상에 하나의 postgreSQL 서버가 돌고, 이 서버가 1개의 데이터베이스 클러스터를 관리한다
Object Identifiers(OIDs)
PostgreSQL 내부 모든 객체들은 4bytes unsigned-int ID가 할당되고 해당 ID를 통해 식별
객체들과 OIDs는 유형에 따라 분류하여 메타 데이터를 저장하는 시스템 카탈로그에 보관
데이터베이스 클러스터 생성 시, 데이터 저장 및 관리를 위한 Base 디렉토리가 만들어지며 PGDATA 환경변수에 Base 디렉토리 경로가 저장됨
오브젝트(SQL 오브젝트, 데이터베이스 오브젝트 등)을 관리하기 위한 최상위 계층
postgres
유저, 유틸리티, 외부 툴에서 사용하는 기본 DB
template0
PostgreSQL에서 정의한 원시 기본 데이터베이스
template1
create database
수행문으로 데이터베이스 생성 시, template1 디비를 복제하여 생성함 위 데이터베이스는 $PGDATA/base 디렉토리 밑에 id가 채번되어 저장되어 있다
신규 데이터베이스도 마찬가지로 create database
수행문으로 디비 생성 시 $PGDATA/base 디렉토리 밑에 id가 채번되어 저장된다
사이즈가 1GB가 넘지 않는 테이블 및 인덱스들은 해당 객체들을 소유한 데이터베이스 디렉토리 내부에 하나의 파일로써 저장; 데이터베이스 객체와 마찬자리 OID가 채번되어 파일로써 저장된다
테이블과 인덱스의 데이터 파일들은 relfilenode
라는 변수에 의해 관리되는데, relfilenode의 값과 테이블,인덱스의 OID는 통상적으로 동일하지만, 항상 같지는 않다
사이즈가 1GB가 넘게 되면, .1
과 같은 postfix를 파일이름 뒤에 붙이며 파일을 새로 생성하며, 1GB가 넘을때 마다 시퀀셜 넘버링을 증가시키며 postfix를 붙인 파일을 새로 생성한다
ex) database OID = 234, table OID = 19999
-rw------- 1 postgres postgres 1.0G Apr 21 11:16 data/base/234/19999
-rw------- 1 postgres postgres 1.0G Apr 21 11:16 data/base/234/19999.1
-rw------- 1 postgres postgres 93MB Apr 21 11:16 data/base/234/19999.2
오브젝트들을 포함하는 네임스페이스
오브젝트를 저장하는 파일 시스템 내 위치를 직접 지정할 수 있도록 한다;
데이터베이스 디렉토리 외부에 오브젝트 파일을 저장할 수도 있게 한다
PostgreSQL에서 데이터(heap table, index, free space map, and visibility map)를 파일에 저장할 때 사용하는 분할 고정크기(default: 8kb)의 영역(단위)
Block Number
라고 한다block number
와 offset number(line pointer)
두가지 식별자로 구성되어, 어떤 페이지의 몇번째 아이템인지 정보를 저장한다테이블, 인덱스, free space map, visibility map 파일에서 사용하는 공통적인 구조
테이블, 인덱스(B-Tree ...) 등 타입이나 데이터 접근 방식(Access Method)에 따라 페이지 레이아웃의 내용이 다르게 채워진다
테이블 파일에 새로운 데이터를 쓰기 전에, 현재 페이지의 공간을 체크한다
새롭게 저장될 튜플의 크기와 Free Space (= pd_lower - pd_upper)를 비교하여, 해당 페이지에 튜플을 저장할 지 결정한다