본문 바로가기

반응형

DB

(71)
[ SQL ] DISTINCT ON 사용시 선택되는 순서 정하기 좋은 질문 주셨습니다 🙂PostgreSQL의 DISTINCT ON 구문은 특정 컬럼 조합에서 "첫 번째 행만" 남기고 중복을 제거하는 기능인데,"어떤 행을 첫 번째로 선택할지"는 반드시 ORDER BY 절로 정해야 합니다.1. 기본 문법SELECT DISTINCT ON (컬럼1 [, 컬럼2 ...]) *FROM 테이블ORDER BY 컬럼1 [, 컬럼2 ...], 정렬기준컬럼 DESC;DISTINCT ON (컬럼들) : 중복을 판별하는 기준ORDER BY : 어떤 행을 남길지 결정하는 기준반드시 DISTINCT ON 컬럼이 ORDER BY의 맨 앞에 나와야 함2. 예제1. 고객별로 최신 주문만 가져오기SELECT DISTINCT ON (customer_id) customer_id, order..
[ SQL ] column 이 같은 테이블 합치기 컬럼 이름이 같은 두 개의 테이블을 묶는 방법은, 어떤 방식으로 "묶을" 것인지에 따라 다릅니다. 아래는 대표적인 경우들을 정리한 것입니다.1. 단순히 세로로 묶기 (UNION / UNION ALL)컬럼 이름과 데이터 타입, 순서가 동일할 때 가능합니다.SELECT col1, col2FROM table_aUNION ALLSELECT col1, col2FROM table_b;UNION: 중복 제거UNION ALL: 중복 허용 (더 빠름)2. 옆으로 붙이기 (JOIN)공통된 키가 있을 때 조인합니다.SELECT a.col1, a.col2, b.col3FROM table_a aJOIN table_b b ON a.id = b.id;컬럼명이 같더라도 테이블 별칭(a.col1, b.col1)을 반드시 명시해야 충돌..
[ PostgreSQL ] 중복된 Column 데이터중 한 종류만 선택해서 Select 할 경우 a 항목에 중복이 있을 때, 이를 b 기준으로 정렬하고 a별로 첫 번째 row만 선택하는 SQL은 다음과 같은 방식으로 작성할 수 있습니다.방법 1: ROW_NUMBER() 윈도우 함수 사용 (PostgreSQL, MySQL 8+, SQL Server 등)SELECT a, b, cFROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY b ASC) AS rn FROM your_table) subWHERE rn = 1;설명:PARTITION BY a: a 값별로 그룹화ORDER BY b ASC: b를 기준으로 오름차순 정렬ROW_NUMBER() = 1: 정렬된 결과 중 첫 번째 row만 선택방법 2: DISTINCT ON 사용 ..
[ PostgreSQL ] pg_dump 백업 시 압축하는 방법 PostgreSQL에서 pg_dump 백업 시 압축하려면 다음과 같은 방법을 사용할 수 있습니다:1. pg_dump 자체 압축 형식 사용1. -Fc: PostgreSQL 전용 Custom Format (압축 포함)pg_dump -U postgres -d mydb -F c -f mydb.dump-F c 또는 --format=custom압축이 적용된 바이너리 형식복원 시에는 pg_restore를 사용해야 함2. -Fd: Directory 형식 (각 테이블별로 나뉘고 압축 적용 가능)pg_dump -U postgres -d mydb -F d -f /path/to/dump_dir-F d 또는 --format=directorypg_restore로 복원하며, 병렬 작업 가능내부적으로 gzip 압축 포함 가능2. 일..
[ PostgreSQL ] 데이터 베이스 연결시 네트워크 확인하기 클라이언트에서 PostgreSQL 서버에 처음 접속하는 상황에서, 다음 항목들을 순차적으로 점검하면 연결 상태를 정확히 파악할 수 있습니다. 아래는 체크리스트와 각 단계에서 사용하는 명령어들입니다.1. 서버까지 경로가 열려 있는지 확인 (네트워크 연결 확인)🔹 ping 명령어로 서버 IP 확인ping 예: ping 192.168.1.100응답이 오면 IP 레벨에서는 접근 가능🔹 traceroute (Linux/macOS) 또는 tracert (Windows)로 경로 확인traceroute # Linux/macOStracert # Windows경로 상 어디에서 패킷이 차단되는지 확인 가능2. 서버의 포트가 열려 있는지 확인PostgreSQL의 기본 포트는 5432입니다.🔹 클라이언..
[ MongoDB ] Windows에 MongoDB 설치하는 방법 🌱 Windows에 MongoDB 설치하는 방법1. MongoDB 다운로드MongoDB 공식 다운로드 페이지로 이동합니다.다음 옵션을 선택합니다:Edition: Community ServerVersion: 최신 안정 버전OS: WindowsPackage: MSIDownload 버튼을 눌러 설치 파일을 받습니다.2. MongoDB 설치다운로드한 .msi 파일을 실행합니다."Complete" 설치를 선택합니다."Install MongoDB as a Service"가 체크되어 있는지 확인합니다.Service Name: mongodb (기본값)Run Service as Network Service user (기본값)MongoDB Compass 설치 여부를 선택합니다 (원하지 않으면 체크 해제).Install ..
[ PostgreSQL ] query 처리 모니터링 하기 PostgreSQL에서 들어온 요청(request)이 얼마나 쌓이는지, 즉 대기 중이거나 병목 상태인 요청이 있는지를 확인하려면 다음 방법들을 사용하면 됩니다:1. pg_stat_activity에서 대기 상태 확인SELECT pid, datname, usename, state, wait_event_type, wait_event, queryFROM pg_stat_activityWHERE state != 'idle';이 쿼리를 통해 현재 실행 중이거나 대기 중인 쿼리들을 실시간으로 볼 수 있습니다.state:active → 실행 중인 쿼리idle in transaction → 트랜잭션은 켜져 있지만 실행 중 아님wait_event_type과 wait_event:'IO', 'Client', 'Lock' 등이 ..
[ PostgreSQL ] 부하 테스트 하기 1. 수정 조건 요약항목 설정 내용DatabasemydatabaseSchemaloadtestTabletype1부하 강화INSERT마다 WAL flush + I/O 집중추가 부하- 큰 TEXT 필드 2개- 무작위 UNIQUE 값- 인덱스 추가- 단일 COMMIT2. 부하 유도 전략 추가schema 별도 생성 및 사용긴 텍스트 필드 2개 (bio, payload) 추가username, email, payload_hash 에 인덱스1건당 INSERT + COMMIT으로 WAL flush 매번 유도3. 최종 코드import psycopg2import randomimport stringfrom datetime import datetimeimport timeimport hashlibDB_HOST = 'localho..

반응형