[PostgreSQL] 윈도우 함수(Window Functions)의 개념, 성능 및 사용법 (over, sum/rank/ntitle/cume_dist 등...)

1. 윈도우 함수 (Window Functions)란? 윈도우 함수는 행과 행 간의 관계를 쉽게 정의하기 위해 만든 함수이다. 이 기능은 일반 집계함수의 연산과 유사하지만, 일반 집계함수가 행 각각을 단일 그룹화해서 출력하는 반면에, 윈도우 함수는 각각의 행들이 그룹화되지 않으며 별도의 ID를 가진다. 그렇기에 윈도우 함수는 현재 row의 정보보다 더 많은 정보에 접근이 가능하다. 예를 들면 다음과 같다. 일반집계함수 : COUNT() + GROUP BY-> 그룹별 1개의 행 출력 (그룹 개수만큼 출력, 자르기 + 집약) 윈도우집계함수 : COUNT() OVER (PARTITION BY) -> ID개수만큼 행 출력 (행의 개수가 줄어들지 않는다, 자르기) ...

10월 31, 2023 · Jun Kang

[PostgreSQL] 데이터베이스 상속(Inheritance)의 개념과 사용법 및 성능비교 (Inherits, Only)

1. 데이터베이스 상속(Inheritance)이란? 상속은 객체지향 데이터베이스의 개념 중 하나이다. PostgreSQL은 테이블 생성 시 하나 이상의 다른 테이블로부터의 상속 기능을 제공하며, 이를 잘 활용하면 데이터베이스 설계에 새로운 가능성들을 열어준다. 데이터뿐만 아니라 부모 테이블의 컬럼 속성 및 인덱스 등의 특징들도 자식 테이블로 상속되기에 상황에 따라 효율적인 설계가 가능하다. 2.데이터베이스 상속(Inherits) 방법 다음 예제는 PostgreSQL 공식 문서의 예제이다. Capitals - 이름, 인구, 고도, 요약어를 포함한 수도의 정보가 포함된 테이블 Cities - 이름, 인구, 고도를 포함한 도시 정보가 포함된 테이블 ...

10월 30, 2023 · Jun Kang

[PostgreSQL] 날짜 형태 검증하기 (ERROR: date/time field value out of range)

1. 날짜 형태로 형 변환 데이터 베이스에서 날짜형태로 형 변환을 하는 것은 다음과 같은 방법으로 쉽게 가능하다. -- Unix타임(int)형 변환 SELECT to_timestamp(1658792421) -- varchar 타입 변환 SELECT to_timestamp('20231026','yyyymmdd') -- 날짜형을 char로 변환 SELECT to_char(to_timestamp(1658792421), 'DD-MM-YYYY') 2. 유효한 날짜형태 검증 데이터 정제가 완료되지 않아 조회하려는 데이터에 날짜유형에서 벗어난 데이터 ('20231301',202301', '20231232' 등)가 하나라도 있을 경우 조회 자체가 안된다. 그럴 경우 날짜 규격에 맞지 않는 데이터를 보정 후 연산해야 하는 경우가 있는데 단순 월별 케이스문으로 분리하여 날짜 유형에 어긋나는 경우를 찾을 수도 있지만 row마다 날짜 유형이 다르거나 윤달을 체크할 수 없다. ...

10월 26, 2023 · Jun Kang

[PostgreSQL] 쿼리 성능향상 (실행계획 보는 법, 상세 확인방법, Explain의 어떤 지표를 봐야할까?)

1. 실행 계획 확인 --Synopsis EXPLAIN [ ( option [, ...] ) ] 쿼리문 EXPLAIN [ ANALYZE ] [ VERBOSE ] 쿼리문 option 자리에 사용할 수 있는 것들: ANALYZE [ boolean ] VERBOSE [ boolean ] COSTS [ boolean ] BUFFERS [ boolean ] TIMING [ boolean ] FORMAT { TEXT | XML | JSON | YAML } * 이후 설명에서 사용될 테스트 데이터는 아래의 "7. 테스트 데이터 생성" 부분 쿼리 확인 ...

10월 12, 2023 · Jun Kang

[PostgreSQL] 뷰(VIEW) 테이블 개념 및 사용, 생성(CREATE), 수정(CREATE OR REPLACE), 삭제(DROP)

1. 뷰(VIEW) 테이블의 사용 (생성, 삭제, 수정) -- 기본 생성 CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy'; -- 삭제 DROP VIEW comedies --Synopsis CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query -- or CREATE VIEW name [ ( column [, ...] ) ] AS query [ WITH [ CASCADE | LOCAL ] CHECK OPTION ] 2. 뷰(VIEW)의 개념 및 특징 정의된 쿼리를 실행시켜 가상의 테이블 형태로 보여주며 테이블을 조회하는 것과 같은 방식으로 조회가 가능하다. VIEW는 물리적으로 생성되지 않는다. 복잡한 쿼리를 단순화시키거나 반복된 쿼리 작업을 효율적으로 처리할 수 있게 해 준다. VIEW에 참조된 쿼리는 호출 시 매번 새로 실행되기에 실시간 결과물을 조회할 수 있다. CREATE OR REPLACE VIEW로 VIEW를 수정할 시, 완전히 일치하는 컬럼 셋을 조회하는 쿼리로만 대체가 가능하다. (같은 컬럼명과 데이터타입) Schema 명을 명시적으로 작성하면 해당 Schema에, 아니라면 현재 Schema에 생성된다. View, Table, Sequence, Index는 한 스키마에 중복된 명칭을 가질 수 없다. VIEW 결과물은 수정이 불가능하다. 테이블의 전체 컬럼 및 정보를 직접적으로 노출시키지 않은 채로 사용이 가능하다. 3. 주의사항 3-1. READ-ONLY VIEW 자체에 insert, update, delete를 실행할 수 없다. ...

10월 11, 2023 · Jun Kang