개발/DB 4

[Timescaledb] Materialized View로 통계 조회 속도 개선 방법

Timescaledb를 적용하면서 1분, 1시간, 1일 통계 데이터 조회를 어떻게 해야 성능이 좋을지 고민을 했다.  첫 번째는 1분, 1시간, 1일 통계 데이터를 내서 별도의 테이블에 insert를 하는 방법이다. 이전에 사용하던 방식이라 로직을 크게 수정할 필요는 없었다. 하지만 수집되는 데이터 양이 많아서 동시에 같은 테이블을 insert를 하고 web에서는 select를 하게 되면 속도가 엄청 느려졌다.   두 번째 방법으로는 Materialized view를 활용하는 것이다. 통계 데이터 조회 속도를 높이기 위해 time_bucket을 사용해 Materialized View를 생성한다.    View는 알고 있었지만 Materialized View를 처음 알게 돼서 정리해보려고 한다. (이 포스..

개발/DB 2024.07.26

[DB] Timescaledb에서 PK와 Unique index 차이점

일반 테이블에서 hyper table로 만들 때, 평소에 사용했던 PK를 사용하지 않아 unique index를 사용했다.  PK와 unique index를 비슷한 느낌으로만 알고, 정확한 개념을 몰라서 정리해보려고 한다. CREATE TABLE h_user_access_data ( user_part varchar(100) NOT NULL, user_id varchar(100) NOT NULL, user_nm varchar(250) NOT NULL, access_date timestamp NOT null);CREATE UNIQUE INDEX idx_h_user_access_data ON public.h_user_access_data USING btree (user_id, user_part, access..

개발/DB 2024.07.16

[Timescaledb] Function, Procedure Job 스케줄러 등록 및 확인 방법

1. Function, Procedure 생성시 파라미터로 반드시 job_id int, config jsonb 추가해준다.CREATE OR REPLACE PROCEDURE public.test_procedure(job_id int, config jsonb) LANGUAGE plpgsqlAS $function$declarebegin insert into user_access(id, name, time) select id, name, now() from user_info; END;$function$;    2. job을 추가해준다. select add_job( function/procedure 이름, schedule_interval => 스케줄러 주기, initial_start => 시..

개발/DB 2024.07.03

[Postgresql] function return 값을 table로 보내기

[상황]sub_function에서 쿼리를 조회해서 record 형식으로 넘기고 main_function에서 record로 받았더니, record가 문자로 받아지는 현상이 있었다. -- sub_function 정의CREATE OR REPLACE FUNCTION sub_function()RETURNS record LANGUAGE plpgsqlAS $function$DECLARE sub_rec RECORD;BEGIN SELECT id, name into sub_rec FROM user_info; return sub_rec;END;$function$;-- main_function 정의CREATE OR REPLACE FUNCTION main_function()RETURNS VOID L..

개발/DB 2024.07.03