#postgresql
13개의 글.

값이 하나뿐인 컬럼이 인덱스를 죽인다
복합 인덱스의 선두 컬럼을 쿼리에서 생략하면 인덱스를 전혀 활용할 수 없습니다. 특히 카디널리티가 1인 무의미한 컬럼이 선두라면 반드시 조건절에 상수로 포함해 인덱스를 활성화하고, 대량의 데이터 조회 시에는 커버링 인덱스를 활용해 힙 접근을 최소화하는 전략이 필요합니다
2026-09-10 · 8 min read
#postgresql#인덱스#쿼리튜닝

링크 테이블을 조인해 SUM 하면 파일 하나를 여러 번 센다
파일과 링크 테이블을 조인해 합산할 때 발생하는 중복 집계 문제를 해결하는 방법과, 데이터의 정확성을 보장하기 위해 물리 파일 기준으로 그룹화하여 결정론적인 결과를 도출하는 과정 및 실측 검증의 중요성을 다룹니다
2026-09-10 · 6 min read
#postgresql#sql#집계

idx_scan=0 은 인덱스가 필요없다는 뜻이 아니다 — OR 한쪽이 인덱스를 잠근다
PostgreSQL에서 인덱스 스캔이 발생하지 않는 원인은 인덱스 불필요가 아닌 OR 조건 때문일 수 있습니다. 쿼리를 분리해 인덱스 활용도를 높이고 TOAST 비용을 고려한 최적화 전략을 통해 검색 성능을 획기적으로 개선하는 실무 노하우를 확인해 보세요
2026-08-07 · 8 min read
#postgresql#index#pg_trgm#performance

PostgreSQL 42P18 — 조건부 SQL 빌더에서 파라미터를 미리 넣으면 안 되는 이유
PostgreSQL에서 조건부 SQL 빌더 사용 시 참조되지 않는 파라미터가 포함되면 42P18 오류가 발생하므로 절과 파라미터를 함께 관리하고 실제 DB 파싱 테스트를 통해 검증해야 합니다
2026-08-04 · 6 min read
#postgresql#sql#backend#debugging

인덱스를 만들었는데 플래너가 안 쓴다 — EXISTS 가 selectivity 추정을 무너뜨릴 때
인덱스를 생성해도 쿼리 속도가 개선되지 않는 이유는 EXISTS 절의 잘못된 행 수 추정으로 인해 플래너가 인덱스의 조기 종료 기능을 활용하지 못하기 때문입니다. 통계 정보 수정이 아닌 CTE를 활용한 최적화 배리어로 쿼리 구조를 격리하면 플래너의 오판을 방지하고 인덱스 성능을 온전히 이끌어낼 수 있습니다
2026-07-31 · 10 min read
#postgresql#query-plan#index#performance
PostgreSQL 인덱스 설계 총정리 — 부분·복합·커버링·표현식부터 GIN/BRIN까지
PostgreSQL의 성능 최적화를 위해 부분·복합·커버링·표현식 인덱스 등 다양한 설계 기법을 정리하고, 데이터 특성에 맞는 GIN·BRIN 활용법과 운영 중 안전한 인덱스 관리 및 검증 전략을 상세히 설명한다
2026-06-11 · 14 min read
#postgresql#database#index#sql#performance
PostgreSQL에서 varchar(n) 대신 text를 권장하는 이유
PostgreSQL에서 varchar(n)은 성능상 이점이 없으며 오히려 불필요한 길이 제한으로 운영 장애를 유발할 수 있습니다. 동일한 저장 구조를 가진 text 타입을 기본으로 사용하고, 데이터 검증이 필요한 경우에만 CHECK 제약을 활용하는 것이 데이터베이스 설계와 유지보수 측면에서 훨씬 효율적입니다
2026-06-11 · 7 min read
#postgresql#database#sql#데이터모델링

pgvector로 PostgreSQL에서 시맨틱 검색 구현하기
임베딩과 벡터 검색의 원리부터 pgvector의 거리 연산자, IVFFlat·HNSW 인덱스 트레이드오프, 하이브리드 검색까지 PostgreSQL로 시맨틱 검색을 구현하는 법을 정리한다.
2026-06-02 · 23 min read
#postgresql#ai#search#database

PostgreSQL 트랜잭션 격리 수준 실전 정리
PostgreSQL의 트랜잭션 격리 수준은 SQL 표준과 다르며 MVCC 기반으로 동작합니다. 기본값인 Read Committed를 넘어 데이터 정합성을 위해 Repeatable Read나 Serializable을 선택할 때는 각 수준의 이상 현상 차단 범위와 재시도 로직 구현 등 실무적인 설계 원칙을 반드시 이해해야 합니다
2026-06-01 · 24 min read
#postgresql#database#transaction#backend

무중단 데이터베이스 스키마 마이그레이션
운영 중 스키마 변경의 위험(테이블 잠금·rewrite)을 피하는 expand→migrate→contract 패턴을, CREATE INDEX CONCURRENTLY·NOT VALID/VALIDATE·배치 backfill 등 단계별 SQL로 정리한다.
2026-05-31 · 26 min read
#postgresql#database#devops#backend

커넥션 풀링과 PgBouncer: 연결 고갈 막기
PostgreSQL이 연결마다 프로세스를 띄우는 구조와 연결 고갈 문제를 짚고, PgBouncer의 session·transaction·statement 풀 모드와 서버리스 환경의 함정, 풀 사이징을 정리한다.
2026-05-30 · 23 min read
#postgresql#database#performance#backend

페이지네이션 제대로: OFFSET vs 커서(keyset)
OFFSET 방식은 데이터가 많아질수록 성능이 저하되고 데이터 변경 시 중복이나 누락이 발생하기 쉽습니다. 이를 해결하기 위해 마지막 데이터의 정렬 키를 기준으로 다음 페이지를 조회하는 커서(keyset) 페이지네이션을 활용하면 성능과 정확성을 모두 확보할 수 있습니다
2026-05-28 · 25 min read
#postgresql#database#performance#backend

유용한 PostgreSQL 기능 8가지
애플리케이션의 복잡한 로직을 데이터베이스 레벨에서 해결해 성능과 정합성을 높이는 PostgreSQL의 핵심 기능 8가지를 소개합니다. DISTINCT ON부터 데이터 변경 CTE까지, 실무에서 코드 양을 줄이고 동시성 문제를 효율적으로 제어할 수 있는 강력한 활용법을 확인해 보세요
2026-05-27 · 9 min read
#postgresql#database#sql#backend