[PostgreSQL] 문자열을 timestamp with time zone으로 변환하는 방법
·
개발 (Development)/PostgreSQL
PostgreSQL을 사용할 때 문자열을 timestamp로 변환해야 하는 경우가 자주 있습니다. 이때 단순히 ::timestamp로 캐스팅하면 될 것 같지만, 시간대(time zone) 를 고려해야 할 상황에서는 주의가 필요합니다. 이번 글에서는 문자열을 timestamp with time zone으로 정확하게 변환하는 방법을 정리해보았습니다.문제 상황: 단순한 캐스팅의 한계예를 들어 다음과 같이 문자열을 ::timestamp로 캐스팅하면,SELECT '2025-07-21 15:00:00'::timestamp;이 결과는 timestamp without time zone 타입으로 변환됩니다. 즉, 시간대 정보가 없는 순수한 날짜 및 시간 값만 저장됩니다. PostgreSQL에서는 timestamp와 ti..
[PostgreSQL] MyBatis foreach + UNION ALL 쿼리의 성능 문제와 PostgreSQL 최적화
·
개발 (Development)/PostgreSQL
최근 프로젝트에서 MyBatis를 사용하여 여러 자산(asset) 정보를 기준으로 태그(tag) 데이터를 조회하는 기능을 구현하던 중, 성능 저하 문제가 발생했습니다. 문제의 원인을 추적해보니 foreach 루프 안에서 UNION ALL로 다수의 SELECT 구문을 반복 생성하는 방식이 주요 원인이었습니다. 본 글에서는 해당 구조의 문제점과 PostgreSQL에 적합한 최적화 방법을 실제 경험을 바탕으로 정리하였습니다.문제 상황: MyBatis foreach + UNION ALL 사용처음 작성한 쿼리는 아래와 같은 형태였습니다. SELECT item_code, tag_code, tag_name, #{item.assetId} AS asset_physical_na..
[PostgreSQL] PostgreSQL에서 threshold 값 이력 관리 및 최신값 조회 테이블 설계하기
·
개발 (Development)/PostgreSQL
요구사항 정리PostgreSQL을 사용하여 특정 설정값(threshold 등)을 관리해야 하는 상황이 있었습니다. 요구사항은 다음과 같았습니다.설정값을 데이터베이스에 저장하고, 나중에 읽어올 수 있어야 함설정값이 변경될 때마다 이력을 남기고, 기존 값을 덮어쓰지 않아야 함항상 가장 최신의 설정값을 쉽게 조회할 수 있어야 함나중에 다른 설정값이 추가될 수도 있으므로, 확장성 있게 설계하고자 함이러한 조건을 만족시키기 위해 다음과 같은 방식으로 스키마를 설계하였습니다.테이블 설계 방향설정값의 이름과 값을 key-value 형태로 저장하는 방식으로 테이블을 구성하였고, 이력 관리를 위해 created_at 컬럼을 추가하였습니다.테이블 구조 예시CREATE TABLE config_history ( id S..
[PostgreSQL] 두 테이블 비교 시 기준 테이블의 데이터를 모두 유지하는 방법
·
개발 (Development)/PostgreSQL
SQL을 사용하다 보면 두 개의 테이블을 비교하여 원하는 데이터를 조회해야 하는 경우가 자주 발생합니다. 이때 흔히 사용하는 방법이 WHERE a.column = b.column 조건을 통한 비교입니다. 하지만 이 방식은 교집합만 반환하기 때문에, 기준이 되는 테이블의 데이터 중 조건에 일치하지 않는 행은 결과에서 제외되는 문제가 있습니다.PostgreSQL에서도 이러한 문제를 해결하기 위해 사용할 수 있는 방법이 있습니다. 바로 LEFT JOIN 문법입니다.1. 단순 비교: INNER JOIN 또는 WHERE 절 사용SELECT a.*, b.*FROM a, bWHERE a.column = b.column;또는 PostgreSQL의 명시적 조인 방식으로 다음과 같이 쓸 수 있..
[PostgreSQL] 시퀀스 자동 증가 설정과 오류 해결 방법 정리
·
개발 (Development)/PostgreSQL
PostgreSQL에서 기본 키에 자동 증가 기능을 설정할 때는 시퀀스(Sequence) 를 활용합니다. 그러나 실무에서는 테이블을 사전에 정의한 뒤, 시퀀스를 나중에 따로 연결해야 하거나 SQL 파일로 배포 시 동적 값을 반영해야 할 수도 있습니다.이번 글에서는 다음과 같은 내용을 단계별로 정리합니다.특정 컬럼에 시퀀스가 적용되어 있는지 확인하고, 없을 경우 생성 및 연결하는 방법시퀀스 생성 시 발생할 수 있는 sequence must have same owner as table 오류 해결SQL 파일에 시작값을 반영하기 위한 자동화 방식1. 시퀀스 존재 확인 및 자동 증가 설정예를 들어 example_table이라는 테이블의 id 컬럼에 시퀀스가 연결되어 있지 않다면, 수동으로 생성하고 연동해줘야 합니..