목록DB/PostgreSQL (20)
나의 잡다한 노트 및 메모
Postgrest PG DB를 REST API 서버로 만들어주는 웹 서버.그래서 테이블/뷰/함수를 REST 엔드포인트로 자동 매핑해준다.예시를 들면, SELECT, INSERT, UPDATE, DELETE 같은 SQL 작업을 GET/POST/PATCH/DELETE 같은 HTTP 메서드로 노출하는 API 게이트웨이, 미들웨어 역할을 한다.자동 생성된 API 사용 예GET /tasks → SELECT * FROM tasks;POST /tasks → INSERT INTO tasks ...PATCH /tasks?id=eq.10 → UPDATE tasks SET ... WHERE id = 10DELETE /tasks?id=eq.10 → DELETE FROM tasks WHERE id = 10무엇을 보고 API를..
SELECT slot_name, slot_type, active,pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_from_current,restart_lsn, confirmed_flush_lsnFROM pg_replication_slotsORDER BY pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) DESC;이 쿼리를 사용할 때는 pg_wal이 굉장히 많이 잡혀있어서 확인하게 된게 계기이다.이걸 통해 고아 slot들이 있음을 확인했다. SELECT * FROM pg_subscription;slot들 중에서 구독된 게 있는지 확인했고, 고아슬롯인지 확인햇다. SELE..
1. 데이터베이스/스키마/오브젝트 정보pg_database: 클러스터에 존재하는 모든 데이터베이스 목록어떤 DB가 있는지, size, encoding 확인 SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database; pg_namespace: 스키마(namespace) 목록스키마별 권한 관리할 때 확인pg_class: 테이블, 인덱스, 시퀀스 등 relation 객체 정보튜플 개수, relkind(’r’=table, ’i’=index 등 SELECT relname, relkind, reltuples FROM pg_class WHERE relkind='r'; pg_attribute: 테이블 컬럼(열) 정보2. 사용자 / 권한pg_ro..
PostgreSQL 테이블에서 더 이상 필요 없는(dead) 데이터를 정리하고, 저장 공간과 성능을 회복하는 작업. PostgreSQL의 특성 (MVCC)PostgreSQL은 MVCC (Multi-Version Concurrency Control) 방식을 사용합니다.즉, 데이터를 UPDATE하거나 DELETE하면 기존 행(row)을 **즉시 지우지 않고 “죽은 튜플(dead tuple)”**로 남겨둡니다.새로운 버전의 행은 같은 테이블에 새로 기록됩니다.이렇게 해야 동시에 SELECT 중인 세션이 여전히 옛 데이터를 볼 수 있기 때문입니다.➡️ 하지만 이런 dead tuple이 무한정 쌓이면 디스크 공간 낭비 + 쿼리 성능 저하가 발생합니다.그래서 필요할 때마다 VACUUM이 필요합니다. VACUUM의 ..
PostgreSQL에서 tablespace는 간단히 말하면 데이터 파일이 저장될 실제 물리적 위치(디스크 경로)를 논리적으로 이름 붙인 것 기본 개념PostgreSQL은 모든 데이터(테이블, 인덱스, 시스템 카탈로그)를 파일로 디스크에 저장합니다.이때 그 파일들이 놓이는 디렉터리 경로를 추상화한 것이 tablespace입니다.따라서 tablespace는 "이 데이터는 어떤 디스크/경로에 저장해야 한다"를 PostgreSQL에게 알려주는 장치입니다. 기본 제공 tablespacePostgreSQL을 설치하면 두 개의 tablespace가 기본 제공됩니다:pg_default일반적인 테이블/인덱스가 저장되는 기본 tablespace실제 경로는 PostgreSQL 데이터 디렉터리($PGDATA/base)입니다...
SUBSCRIPTION은 PostgreSQL의 논리적 복제(Logical Replication) 기능에서 구독자(subscriber) 쪽에 정의하는 객체입니다. 쉽게 말하면 다른 데이터베이스의 변경 사항을 받아오는 역할을 하는 거예요.🔹 언제 SUBSCRIPTION을 쓰나?부분 테이블 복제 (선택적 복제)물리적 스트리밍(replication slot + standby)은 DB 전체를 통째로 복제합니다.반면 논리 복제는 특정 테이블만 골라서 복제할 수 있습니다.예: 운영 DB에서 orders 테이블만 분석 DB로 실시간 복제.이기종 환경 (버전/플랫폼 다른 DB)물리 복제는 PostgreSQL 버전/플랫폼 동일성이 강제됩니다.논리 복제(SUBSCRIPTION)는 PostgreSQL 버전이 달라도, 심지어..
PostgreSQL에서 Replication Slot은 WAL(Write Ahead Log) 로그 손실 방지 및 동기화 관리를 위한 메커니즘입니다. 기본적으로 물리적/논리적 복제 환경에서 슬레이브(또는 구독자)가 필요한 WAL 데이터를 잃지 않도록 보장하는 역할을 합니다.1. Replication Slot이란?Replication Slot은 서버 측에 생성되는 객체로, 특정 복제 클라이언트(standby, logical subscriber)가 어디까지 WAL을 읽었는지를 추적합니다.이를 통해 Postgres는 해당 슬롯이 소비되기 전까지 WAL 파일을 재활용하거나 삭제하지 않음으로써, 슬레이브가 뒤처져 있어도 데이터 손실이 발생하지 않도록 합니다.2. 동작 방식슬롯 생성physical slot → sta..
1) 2PC가 뭐고 언제 쓰나목적: 여러 자원(노드/샤드/DB/외부 시스템)에 걸친 트랜잭션을 원자적으로 커밋하거나 롤백하기 위해 쓰는 프로토콜입니다.적용 예:분산 DB의 여러 샤드에 걸친 쓰기DB + 메시지브로커/외부 시스템 동시 원자성 확보(XA 패턴)Citus처럼 코디네이터 ↔ 워커 노드가 있는 구조의 다중 샤드 갱신 2) Postgres의 2PC 동작(명령 흐름)PostgreSQL은 트랜잭션을 준비(prepare) 상태로 영속화해 두었다가, 최종 결정에 따라 커밋/롤백합니다.(일반 트랜잭션 수행) BEGIN; -- DML/DDL... 준비 단계(Phase 1) – 디스크에 상태를 기록이 시점에 트랜잭션은 prepared 상태가 되고, 서버 재시작 후에도 남습니다.락과 XID가 유지되어 다른 세션을..