PostgreSQL 썸네일형 리스트형 [PostgreSQL] PostgreSQL에서 주 단위 데이터 분석, DATE_TRUNC로 해결하는 방법 - 컴도리돌이 데이터를 다룰 때 특정 기간(예: 한 주, 한 달) 동안의 변화나 패턴을 분석해야 하는 경우가 많습니다. PostgreSQL의 DATE_TRUNC 함수를 사용하면 날짜를 원하는 단위로 손쉽게 자르고 그룹화할 수 있습니다. 예를 들어, 한 주 동안 같은 사용자가 여러 번 가입했거나 특정 이벤트에 여러 차례 참여한 경우를 찾아야 한다고 가정해 봅시다. 일반적인 GROUP BY로는 특정 날짜별 집계는 가능하지만, 주 단위로 그룹화하려면 어떻게 해야 할까요? DATE_TRUNC 함수는 날짜 또는 시간을 지정한 단위로 잘라서 반환합니다. 이 함수를 사용하면 모든 날짜가 해당 주(week)의 시작일(월요일 00:00:00)로 변환됩니다. 이렇게 하면 같은 주에 속하는 데이터가 동일한 값으로 그룹화됩니다.SELEC.. 더보기 [Logstash] Logstash를 활용한 PostgreSQL 데이터 Elasticsearch에 Bulk Insert 작업 설정 - 컴도리돌이 운영 환경에서 PostgreSQL 데이터를 Elasticsearch로 전송하는 과정에서 Bulk Insert 작업이 어떻게 이루어지는지 궁금할 때가 있습니다. 데이터는 정상적으로 조회되지만 정작 인스턴스 내부에서는 명확한 실행 스크립트나 배치 파일이 보이지 않더라고요.🤔이러한 경우, 데이터가 어떤 방식으로 처리되는지 파악하는 것이 중요하기 때문에 이번 기회에 로그스태시에서 기존 DB에 있는 데이터를 Elasticsearch에 대량 추가하는 방법을 알아보려고 합니다. 우선, /etc/logstach/conf.d/ 디렉터리를 확인하는 것이 가장 먼저 해야 할 일입니다. 로그스태시는 데이터를 수집하고 변환한 후 Elasticsearch로 전달하는 역할을 합니다. 이 디렉터리 내 .conf 파일을 살펴보면,.. 더보기 [Mybatis] WHERE 1= 1 사용 대신 trim으로 해결하기 - 컴도리돌이 MyBatis에서 동적 SQL을 작성할 때 흔히 WHERE 1=1 패턴을 사용하는 경우가 많아요. 여러 조건을 동적으로 추가해야 할 때 처음부터 WHERE 절을 넣어두고, 뒤에 AND 또는 OR 조건을 추가하는 방식이죠. 하지만 이 방식은 SQL 가독성을 해치고, 불필요한 연산이 발생할 가능성이 있어요. 이를 해결하기 위해 MyBatis에서는 태그를 제공하며, 이를 활용하면 불필요한 AND 또는 OR을 자동으로 제거하면서도 깔끔한 SQL을 생성할 수 있어요.1. WHERE 절에서 trim 활용하기기본적으로 태그는 prefix, suffix, prefixOverrides, suffixOverrides 속성을 사용하여 특정 키워드를 동적으로 추가하거나 제거하는 기능을 제공해요. 예를 들어, 아래 코드처럼.. 더보기 [PostgreSQL] PostGIS 설치 및 사용 - 컴도리돌이 주어진 좌표가 어떤 행정구역에 포함되는지 알아야 하는 상황이 생겼습니다. 여러 방법이 있지만 그중에서 PostgreSQL에 있는 확장 라이브러리인 PostGIS가 속도 및 정확성에 성능이 매우 뛰어난다고 소문이 났기에 저도 한번 PostGIS를 사용하면서 어떤지 맛 좀 보려고 해당 포스팅을 작성하려고 합니다. PostgreSQL에서 GIS 데이터를 다루기 위해 PostGIS 확장이 필요해요. 먼저 PostGIS를 설치하고 활성화한 후, 다음과 같은 테이블을 설계할 수 있어요.-- PostGIS 확장 활성화CREATE EXTENSION IF NOT EXISTS postgis;-- 경계선 데이터를 저장할 테이블CREATE TABLE boundaries ( id SERIAL PRIMARY KEY, .. 더보기 [PostgreSQL] 텍스트 검색 최적화: phraseto_tsquery - 컴도리돌이 이번에 검색 기능을 최적화해야 하는 쿼리가 있었습니다. 검색 시스템의 성능은 사용자 경험에 크게 영향을 미치기 때문에, 빠르게 정확한 검색 결과를 제공하는 것이 매우 중요하죠. 처음에 유저가 검색한 데이터를 보여주기 위해서, PostgreSQL의 LIKE 연산자를 사용하여 텍스트 검색을 처리하곤 했습니다. 그러나 데이터가 많이 지면서 검색 성능이 눈에 띄게 저하되는 상황이 많이 놓였죠 😓특히, 다중 단어 검색에서는 문제점이 더욱 두드러집니다. 예를 들어, "postgresql performance tuning"과 같은 문구를 검색할 때, LIKE 쿼리는 부분 단어 매칭에만 의존해 결과가 너무 광범위하거나 불안전했습니다. 성능도 상당히 떨어지고요. 🤨 그래서 이번에는 단순한 키워드 검색이 아닌, 문장.. 더보기 [PostgreSQL] 제약조건 설정시 주의해야할 부분을 고려하면서(PRIMARY KEY, NOT NULL, UNIQUE, CHECK) - 컴도리돌이 이전 포스팅에서 제약조건을 간단하게 설정하는 방법과 제약조건을 설정할 때 어느 부분을 고려해야 할지 짧게 확인해 보았어요. 이번에는 조금 더 세부적으로 설정하는 방법과 언제 사용하는지에 대해 스터디를 해보려고 해요. [PostgreSQL] 제약조건에 대해서(PRIMARY KEY, UNIQUE, NOT NULL, CHECK) - 컴도리돌이PostgreSQL에서 제약조건에 대해 글을 남겨보려고 해요. 제약조건은 데이터베이스에서 우리가 입력하는 데이터가 올바르고 일관되도록 도와주는 규칙이라 생각하면 돼요. 예를 들어, 고객의 이메comdolidol-i.tistory.com 적절하게 제약조건을 걸자!제약조건을 설정할 때 적재적소하게 사용하는 게 중요하다고 했죠? 모든 필드에 제약조건을 걸고 싶은 유혹이 있을.. 더보기 [PostgreSQL] 제약조건에 대해서(PRIMARY KEY, UNIQUE, NOT NULL, CHECK) - 컴도리돌이 PostgreSQL에서 제약조건에 대해 글을 남겨보려고 해요. 제약조건은 데이터베이스에서 우리가 입력하는 데이터가 올바르고 일관되도록 도와주는 규칙이라 생각하면 돼요. 예를 들어, 고객의 이메일 주소가 잘못 입력되었을 때 이를 방지할 방법이 없다고 하면 큰일이겠죠? 그래서 제약조건에 대해 아는 것은 매우 중요해요. 그럼 예시 코드를 보면서 자세히 알아보겠습니다 😆CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, age INT CHECK (age >= 0)); 이 예시에는 users라는 테이블을 생성하였는데, 여기서 주목할 부분은 PRI.. 더보기 [PostgreSQL] 해시 인덱스(Hash Index)에 대해서 - 컴도리돌이 쿼리를 작성하고 나서 실행 계획을 확인하다 보면 가끔 Bitmap Index Scan이나 Hash Join이라는 용어를 접하게 돼요. 해시 인덱스가 사용된 걸 보고는 이제 데이터 조회가 더 빠르겠지?라고 기대했는데, 의외로 성능이 좋지 않을 때가 많더라고요 🤔 그럴 때마다 해시 인덱스를 사용되었는데, 왜 이렇게 느리지?라는 생각만 들곤 했지만, 한 번도 검색해보지 않는 과거의 저를 반성하며 오늘의 나는 해시 인덱스에 대해 깊이 알아가는 시간을 가지려고 해요 😊 해시 인덱스는 PostgreSQL에서 효율적인 데이터 검색을 위해 제공하는 여러 인덱스 유형 중 하나이에요. 이 인덱스는 특정한 키 값에 대해 매우 빠른 조회 성능을 제공하는데, 그 이유는 해시 함수를 사용하여 데이터를 처리하기 때문이죠. 여기.. 더보기 이전 1 2 다음 목록 더보기