이 섹션에서는 다음 수준의 저장 형식을 설명합니다. 파일 및 디렉터리.
데이터베이스 클러스터에 필요한 모든 데이터는 데이터베이스 클러스터에 저장됩니다. 일반적으로 다음과 같이 참조되는 클러스터의 데이터 디렉터리입니다.PGDATA(환경 변수 이름 뒤) 정의하는 데 사용할 수 있습니다.) 의 공통 위치PGDATA이다/var/lib/pgsql/data. 여러 클러스터, 관리됨 서로 다른 서버 인스턴스에 따라 동일한 시스템에 존재할 수 있습니다.
그PGDATA디렉토리에는 여러 개가 포함되어 있습니다. 하위 디렉터리 및 제어 파일(그림 참조)표 53-1. 이러한 필수 항목 외에도 클러스터 구성 파일postgresql.conf, pg_hba.conf및pg_ident.conf전통적으로 다음 위치에 저장됩니다.PGDATA(비록포스트그레SQL8.0 이상에서는 다음이 가능합니다. 다른 곳에 보관하세요).
표 53-1. 의 내용PGDATA
| 항목 | 설명 |
|---|---|
| PG_VERSION | 다음의 주요 버전 번호를 포함하는 파일PostgreSQL |
| 베이스 | 데이터베이스별 하위 디렉토리 하위 디렉터리 |
| 글로벌 | 다음과 같은 클러스터 전체 테이블을 포함하는 하위 디렉토리pg_database |
| pg_clog | 트랜잭션 커밋 상태를 포함하는 하위 디렉토리 데이터 |
| pg_multixact | 다중 트랜잭션 상태 데이터가 포함된 하위 디렉토리 (공유 행 잠금에 사용됨) |
| pg_stat_tmp | 임시 파일이 포함된 하위 디렉토리 통계 하위 시스템 |
| pg_subtrans | 하위 거래 상태를 포함하는 하위 디렉토리 데이터 |
| pg_tblspc | 다음에 대한 기호 링크가 포함된 하위 디렉토리 테이블스페이스 |
| pg_twophase | 준비된 상태 파일을 포함하는 하위 디렉토리 거래 |
| pg_xlog | WAL(미리 쓰기 로그)이 포함된 하위 디렉토리 파일 |
| postmaster.opts | 서버의 명령줄 옵션을 기록하는 파일 마지막으로 시작되었습니다. |
| postmaster.pid | 현재 서버 PID를 기록하는 잠금 파일 및 공유 메모리 세그먼트 ID(서버 이후에는 존재하지 않음) 종료) |
클러스터의 각 데이터베이스에는 하위 디렉토리가 있습니다 이내PGDATA/베이스, 데이터베이스의 OID를 따서 명명됨pg_database. 이 하위 디렉터리는 데이터베이스 파일의 기본 위치. 특히 그 시스템 카탈로그가 여기에 저장됩니다.
각 테이블과 색인은 다음과 같은 이름의 별도 파일에 저장됩니다. 테이블 또는 인덱스파일 노드번호, 다음에서 찾을 수 있습니다.pg_class.relfilenode. 기본 파일 외에 (a/k/a 메인 포크), 각 테이블과 인덱스에는여유 공간 지도(참조섹션 53.314324_14490_fsm. 테이블에는 다음도 있습니다.가시성 지도, 접미사가 붙은 포크에 저장됨_vm, 어떤 페이지가 알려진지 추적 데드 튜플이 없습니다. 가시성 지도는 다음에 자세히 설명되어 있습니다.토토 : 문서 : 8.4 : 가시성 맵.
| 주의 |
|
테이블의 파일 노드는 종종 테이블의 파일 노드와 일치한다는 점에 유의하십시오. OID는요아님반드시 해당 경우; 다음과 같은 일부 작업잘라내기, REINDEX, 클러스터및 일부 형태테이블 변경, 파일 노드를 변경할 수 있는 동안 OID를 보존합니다. 파일 노드와 테이블 OID는 동일합니다. |
테이블이나 인덱스가 1GB를 초과하면 다음으로 나뉩니다. 기가바이트 크기세그먼트. 첫 번째 세그먼트의 파일 이름은 파일 노드와 동일합니다. 후속 세그먼트의 이름은 filenode.1, filenode.2 등으로 지정됩니다. 파일 크기 제한이 있는 플랫폼에서의 문제를 방지합니다. (실제로는 1GB가 기본 세그먼트 크기입니다. 세그먼트는 구성 옵션을 사용하여 크기를 조정할 수 있습니다.--세그사이즈 포함빌딩 시PostgreSQL.) 원칙적으로 여유 공간 맵은 가시성 맵 포크에도 여러 세그먼트가 필요할 수 있습니다. 그러나 실제로는 이런 일이 일어날 가능성이 없습니다. 내용은 테이블과 인덱스에 대해서는 다음에서 자세히 설명합니다.섹션 53.5.
잠재적으로 큰 항목이 있는 열이 있는 테이블은 관련이 있습니다토스트테이블입니다. 너무 큰 필드 값을 라인 외부에 저장하는 데 사용됩니다. 테이블 행을 적절하게 유지합니다.pg_class.reltoastrelid테이블에서 테이블로의 링크토스트테이블(있는 경우). 참조섹션 53.2더 보기 정보.
테이블스페이스는 시나리오를 더욱 복잡하게 만듭니다. 각각 사용자 정의 테이블스페이스에는 내부에 심볼릭 링크가 있습니다.PGDATA/pg_tblspc디렉토리는 물리적 테이블스페이스 디렉토리를 가리킵니다(예: 해당에 지정됨테이블스페이스 생성명령). 심볼릭 링크의 이름은 테이블스페이스의 OID를 따라 지정됩니다. 물리적 테이블스페이스 디렉터리 내부에는 하위 디렉터리가 있습니다. 테이블스페이스에 요소가 있는 각 데이터베이스에 대해 데이터베이스의 OID 뒤에. 해당 디렉토리 내의 테이블은 다음을 따릅니다. 파일 노드 명명 체계.pg_default테이블스페이스는 다음을 통해 액세스되지 않습니다.pg_tblspc, 그러나 다음과 일치함PGDATA/베이스. 마찬가지로,pg_global테이블스페이스에 액세스되지 않았습니다. 통해pg_tblspc, 그러나 다음과 일치함PGDATA/글로벌.
임시 파일(보다 많은 데이터를 정렬하는 등의 작업용) 메모리에 맞을 수 있음)은 내에 생성됩니다.PGDATA/base/pgsql_tmp, 또는 a 내에서pgsql_tmp의 하위 디렉토리 테이블스페이스가 아닌 경우 테이블스페이스 디렉터리pg_default이(가) 지정되었습니다. 의 이름 임시 파일의 형식은 다음과 같습니다.pgsql_tmpPPP.NNN, 어디서PPP은 PID입니다 백엔드 소유 및NNN해당 백엔드의 다른 임시 파일을 구별합니다.