#postgresql
17개의 글.
SQL 조각에 컬럼 이름만 넘기면 상관 서브쿼리가 자기 자신과 비교한다
상관 서브쿼리에 한정자 없는 컬럼 이름을 넘기면 가장 안쪽 테이블의 컬럼으로 해석되어 조건이 항상 참이 됩니다. 문자열 조각으로 SQL 을 조립할 때 겪은 함정과 방어 방법입니다.
2026-10-24 · 5 min read
#postgresql#sql#subquery#code-review
Postgres 전문검색이 느리면 ts_headline 부터 의심하라 (스니펫 입력 캡)
전문검색이 느린 원인은 인덱스가 아니라 스니펫을 만드는 ts_headline 이었습니다. 입력을 앞 8KB 로 캡해 266ms 를 3ms 로 줄인 과정을 정리했습니다.
2026-10-17 · 4 min read
#postgresql#full-text-search#performance
트랜잭션 안에서 에러를 삼키면 COMMIT 이 조용히 ROLLBACK 된다 (node-postgres)
실패해도 되는 조회를 try/catch 로 삼켰더니 앞선 UPDATE 까지 사라졌습니다. aborted 트랜잭션의 COMMIT 이 에러 없이 ROLLBACK 이 되는 이유와 SAVEPOINT 로 막는 방법입니다.
2026-10-14 · 4 min read
#postgresql#node-postgres#transaction#error-handling
pg-pool 에서 빌린 연결을 오래 쥐면 error 리스너가 없을 때 프로세스가 죽는다
pool.connect() 로 빌린 연결에 error 리스너를 달지 않으면, 쉬는 동안 연결이 끊기는 순간 Node 프로세스 전체가 죽습니다. advisory lock 연결을 예로 원인과 리스너 처리 패턴을 정리했습니다.
2026-10-09 · 8 min read
#postgresql#node-postgres#pg-pool#advisory-lock#error-handling
값이 하나뿐인 컬럼이 인덱스를 죽인다
복합 인덱스의 선두 컬럼을 조건절에서 빼면, 카디널리티가 1이라 무의미해 보여도 인덱스 전체가 Seq Scan으로 죽습니다. 상수로 채워 넣자 35초가 525ms로 줄었습니다.
2026-09-10 · 9 min read
#postgresql#인덱스#쿼리튜닝
링크 테이블을 조인해 SUM 하면 파일 하나를 여러 번 센다
링크 테이블을 조인해 SUM하면 같은 파일이 여러 번 더해져, 중복 링크는 전체의 2%뿐인데도 400GB 넘게 과다 계상됩니다. 물리 파일로 되돌려 더해야 합니다.
2026-09-10 · 7 min read
#postgresql#sql#집계
idx_scan=0 은 인덱스가 필요없다는 뜻이 아니다 — OR 한쪽이 인덱스를 잠근다
OR로 묶인 조건은 한쪽에 인덱스가 없으면 전체가 Seq Scan으로 떨어져, idx_scan=0인 인덱스도 불필요해서가 아니라 잠긴 것일 수 있습니다. 쿼리를 둘로 분리하자 응답이 3,866ms에서 137ms로 줄었습니다.
2026-08-07 · 9 min read
#postgresql#index#pg_trgm#performance
PostgreSQL 42P18 — 조건부 SQL 빌더에서 파라미터를 미리 넣으면 안 되는 이유
PostgreSQL에서 조건부 SQL 빌더 사용 시 참조되지 않는 파라미터가 포함되면 42P18 오류가 발생하므로 절과 파라미터를 함께 관리하고 실제 DB 파싱 테스트를 통해 검증해야 합니다
2026-08-04 · 8 min read
#postgresql#sql#backend#debugging
인덱스를 만들었는데 플래너가 안 쓴다 — EXISTS 가 selectivity 추정을 무너뜨릴 때
EXISTS 서브쿼리는 semi join 행 수를 실제보다 극단적으로 적게 추정해 플래너가 인덱스의 조기 종료 이득을 0으로 보고 Sort 를 유지하는데, MATERIALIZED CTE 로 EXISTS 를 격리하면 130ms가 3ms로 줄어듭니다.
2026-07-31 · 11 min read
#postgresql#query-plan#index#performance
PostgreSQL 인덱스 설계 총정리 — 부분·복합·커버링·표현식부터 GIN/BRIN까지
PostgreSQL 인덱스는 부분·복합·커버링(INCLUDE)·표현식 인덱스로 작고 정확하게 좁힐 수 있고, jsonb·배열은 GIN, 시계열 대용량은 BRIN이 적합하며, CONCURRENTLY·EXPLAIN으로 안전하게 운영합니다.
2026-06-11 · 15 min read
#postgresql#database#index#sql#performance
PostgreSQL에서 varchar(n) 대신 text를 권장하는 이유
PostgreSQL 에서 varchar(n) 과 text 는 저장 구조(varlena)가 같아 성능 차이가 없고, varchar(n) 은 임의의 길이 제한으로 운영 장애만 유발하므로 기본값은 text + CHECK 를 권장합니다.
2026-06-11 · 8 min read
#postgresql#database#sql#데이터모델링
pgvector로 PostgreSQL에서 시맨틱 검색 구현하기
pgvector 는 PostgreSQL 에 vector(N) 컬럼과 코사인 연산자(<=>)를 더해 별도 벡터 DB 없이 시맨틱 검색을 구현하며, 데이터가 자주 바뀌면 recall 높은 HNSW 인덱스가 기본 선택지입니다.
2026-06-02 · 25 min read
#postgresql#ai#search#database
PostgreSQL 트랜잭션 격리 수준 실전 정리
PostgreSQL 의 Repeatable Read 는 스냅샷 격리로 phantom read 까지 막지만 write skew 는 허용하며, 이를 막으려면 Serializable 로 올리고 40001 재시도 로직을 짝지어야 합니다.
2026-06-01 · 26 min read
#postgresql#database#transaction#backend
무중단 데이터베이스 스키마 마이그레이션
운영 중 스키마 변경은 한 번에 바꾸지 않고 expand→migrate→contract 로 나눠야 무중단이 되며, CREATE INDEX CONCURRENTLY 와 NOT VALID→VALIDATE 로 강한 락을 피합니다.
2026-05-31 · 28 min read
#postgresql#database#devops#backend
커넥션 풀링과 PgBouncer: 연결 고갈 막기
PostgreSQL 은 연결마다 OS 프로세스를 띄워 연결 고갈이 나기 쉬우며, PgBouncer 를 transaction 모드로 두면 서버 연결을 소수로 묶지만 prepared statement·SET·advisory lock 이 깨질 수 있습니다.
2026-05-30 · 25 min read
#postgresql#database#performance#backend
페이지네이션 제대로: OFFSET vs 커서(keyset)
OFFSET 은 깊은 페이지일수록 앞 행을 다 읽고 버려 선형으로 느려지고 데이터 변경 중 중복·누락도 생기지만, keyset(커서) 는 정렬 키로 바로 점프해 성능과 정확성을 모두 지킵니다.
2026-05-28 · 27 min read
#postgresql#database#performance#backend
유용한 PostgreSQL 기능 8가지
PostgreSQL 의 DISTINCT ON·LATERAL·FILTER·EXCLUDE·SKIP LOCKED 등 8가지 기능을 쓰면 그룹별 조회·정합성·동시성 제어를 애플리케이션 코드 대신 DB 레벨에서 해결합니다.
2026-05-27 · 10 min read
#postgresql#database#sql#backend