반응형
설치·접속: PostgreSQL 설치와 접속
부제: 성능 테스트용 더미 행이나 "빠진 날짜 없는" 달력 축이 필요할 때, 별도 테이블 없이 SQL 한 줄로 연속된 값 집합을 뽑아 쓰고 싶을 때
-- 날짜를 하루 간격으로 펼친다: 빈 날 없는 시계열 축
SELECT d::date AS day
FROM generate_series('2026-01-01'::date, '2026-01-07'::date, '1 day') d;
day
------------
2026-01-01
2026-01-02
2026-01-03
2026-01-04
2026-01-05
2026-01-06
2026-01-07
(7 rows)generate_series는 시작·끝·간격을 주면 그 사이 값을 한 행씩 펼쳐 주는 집합 반환 함수다. 정수뿐 아니라 날짜·타임스탬프도 interval 간격으로 만들 수 있어, "실제 데이터가 없는 날짜까지 포함한 축"을 즉석에서 세운다. 리포트에서 주문이 0건인 날을 빈칸 없이 채우거나(달력 축과 LEFT JOIN), 인덱스·파티션 성능을 시험할 대량 더미 데이터를 만들 때 표준으로 쓴다. 테이블을 따로 만들 필요가 없어 임시 검증에 특히 가볍다.
이렇게도 쓴다
정수 시퀀스로 계산 결과를 함께 뽑는다.
SELECT g, g*g AS sq FROM generate_series(1,5) g;
-- 1|1 2|4 3|9 4|16 5|25
간격(step)을 지정해 건너뛴다.
SELECT g FROM generate_series(0, 10, 2) g; -- 0,2,4,6,8,10
시각 슬롯을 일정 간격으로 만든다(버킷 축). (조합: interval)
SELECT ts FROM generate_series(
timestamp '2026-01-01 00:00', '2026-01-01 12:00', interval '3 hours') ts;
대량 더미 데이터를 만들어 테이블에 적재한다. (조합: CREATE TABLE AS)
CREATE TABLE m10_bulk AS
SELECT g AS id, (g % 100) AS cat, 'x' AS note
FROM generate_series(1, 500000) g; -- 50만 행 즉석 생성
랜덤 값을 섞어 그럴듯한 테스트 데이터를 만든다. (조합: random)
SELECT g, (random()*100)::int AS score, now() - (g||' hours')::interval AS ts
FROM generate_series(1,10) g;
날짜 축과 실데이터를 LEFT JOIN해 빈 날을 0으로 채운다. (조합: LEFT JOIN)
SELECT d::date AS day, coalesce(count(o.id),0) AS orders
FROM generate_series('2026-01-01'::date,'2026-01-05'::date,'1 day') d
LEFT JOIN orders o ON o.ordered_at::date = d::date
GROUP BY d ORDER BY d;반응형
'명령어 > DB' 카테고리의 다른 글
| [PostgreSQL] GENERATED ALWAYS AS IDENTITY — serial이 만든 시퀀스 어긋남 사고를 막는다 (0) | 2026.08.01 |
|---|---|
| [PostgreSQL] GENERATED 컬럼으로 합계·대문자를 저장 시점에 자동 계산한다 (0) | 2026.08.01 |
| [PostgreSQL] generate_series 달력 축으로 빈 날짜를 0으로 채운다 (1) | 2026.08.01 |
| [PostgreSQL] tsvector / tsquery 전문검색으로 문서 본문을 키워드로 뒤지기 (0) | 2026.08.01 |
| [PostgreSQL] FILTER 절 조건별 카운트를 한 번의 스캔으로 나눠 센다 (0) | 2026.08.01 |