[Python] psycopg2에서 ALTER TABLE 실행하는 올바른 방법
·
개발 (Development)/Python
데이터베이스 작업 중 테이블 구조를 변경해야 할 때, ALTER TABLE 명령을 사용하게 됩니다. 하지만 pandas.read_sql_query()로 이 명령을 실행하려고 하면 오류가 발생합니다. 이번 글에서는 그 이유와 함께, psycopg2를 사용해 ALTER TABLE을 올바르게 실행하는 방법을 정리했습니다.1. 왜 pd.read_sql_query()로는 ALTER TABLE이 안 될까?pandas.read_sql_query()는 SELECT 결과를 DataFrame으로 읽어오는 용도로 만들어졌습니다.즉, 쿼리 실행 후 결과 집합을 반환해야 하는데, ALTER TABLE은 반환값이 없습니다.따라서 아래와 같은 에러가 발생합니다.pandas.io.sql.DatabaseError: Execution ..
[PostgreSQL] 테이블별 용량 확인 방법
·
개발 (Development)/PostgreSQL
PostgreSQL: 테이블별 용량 확인 방법PostgreSQL 데이터베이스를 관리하면서 어떤 테이블이 가장 많은 공간을 차지하고 있는지 파악하는 것은 성능 최적화와 스토리지 관리에 매우 중요한 일입니다. 이 글에서는 PostgreSQL에서 한 데이터베이스 내의 테이블별 전체 용량을 확인하는 세 가지 방법을 알려드리겠습니다.1. SQL 쿼리 활용하기 (가장 정확한 방법)가장 정확하고 상세한 정보를 얻을 수 있는 방법은 SQL 쿼리를 직접 실행하는 것입니다. pg_total_relation_size() 함수는 테이블 자체는 물론, 연관된 인덱스와 TOAST 테이블의 크기까지 합산하여 전체 용량을 보여줍니다.SELECT relname AS "테이블명", pg_size_pretty(pg_total_..
[PostgreSQL/Java] shared memory 에러 해결: Java + MyBatis 대용량 쿼리 처리
·
개발 (Development)/PostgreSQL
최근 프로젝트에서 PostgreSQL 기반의 대용량 데이터를 한 번에 집계하려다가 shared memory segment 에러를 자주 겪었습니다. 처음 한 달 정도는 잘 동작했지만, 기간을 늘려 6개월·1년 단위로 조회하는 순간 DB 메모리 관련 에러가 발생했습니다. 운영 환경에서 서버 파라미터를 크게 건드리기도 부담스러워서, 결국 쿼리를 기간 단위로 쪼개어 조회하고 자바에서 합산하는 방식으로 우회했습니다.아래는 제가 직접 적용했던 과정과 방법들입니다.1. 문제 원인장기간 데이터를 한 번에 조회 → 정렬/집계 단계에서 메모리 과부하PostgreSQL은 공유 메모리 한도를 넘으면 바로 오류 발생DB 설정(work_mem, shared_buffers)을 조정하면 해결 가능하긴 하지만, 운영 중인 환경에서는 ..
[PostgreSQL/TimescaleDB] 데이터 적재 시 발생하는 statement_timeout 및 row is too big 오류 해결 방법
·
개발 (Development)/PostgreSQL
최근 TimescaleDB에 실시간 센서 데이터를 적재하는 과정에서 몇 가지 오류를 경험하였습니다. 로그를 분석하고 해결 방법을 찾아가는 과정을 정리해봅니다.1. 문제 상황Kafka에서 수집한 수천 개의 센서 데이터를 TimescaleDB에 적재하는 컨테이너 로그에서 다음과 같은 오류가 반복적으로 발생했습니다.1.1 statement_timeout 오류ERROR: canceling statement due to statement timeout이는 PostgreSQL의 statement_timeout 값(쿼리 실행 최대 시간)을 초과하면 발생하는 에러입니다. 대량 데이터를 한 번에 Insert하거나, 인덱스 부재, 네트워크 지연, 병렬 쓰기 병목 등으로 실행 시간이 길어질 경우 나타납니다.1.2 row i..
[PostgreSQL] View와 Materialized View의 차이점과 사용법
·
개발 (Development)/PostgreSQL
PostgreSQL을 사용하다 보면 복잡한 쿼리를 반복해서 사용할 일이 많아집니다. 이때 뷰(View)나 물리화 뷰(Materialized View)를 활용하면 쿼리를 깔끔하게 정리하고 재사용할 수 있습니다. 이번 글에서는 PostgreSQL에서 View와 Materialized View의 차이점, 장단점, 그리고 실무 적용 방법에 대해 정리해보았습니다.View란?View(뷰)는 하나 이상의 테이블이나 다른 뷰에 대한 쿼리를 저장해 놓은 가상의 테이블입니다. 데이터를 직접 저장하지 않고, 정의된 SQL 쿼리 결과를 보여주는 역할을 합니다.View의 장점복잡한 쿼리 재사용: 자주 사용하는 조인, 조건 등을 미리 정의해서 깔끔하게 쓸 수 있습니다.보안 강화: 민감한 컬럼을 제외한 일부만 노출하는 뷰를 만들어..