반응형
PostgreSQL에서 변수를 사용하면 쿼리 작성을 더 효율적이고 유연하게 할 수 있습니다. 현직 개발자가 바로 적용할 수 있는 5가지 핵심 기법을 소개합니다.
1. 세션 변수 활용법 (SET 명령어)
-- 변수 설정 (네임스페이스 필수!)
SET app.current_date = '20250411';
-- 변수 사용 예시
SELECT *
FROM orders
WHERE order_date = current_setting('app.current_date')::date;
-- 값 변경시
SET app.current_date TO '20250412';
⚠️ 주의사항:
SET app.var 형식으로 네임스페이스 사용 필수. SET my_var처럼 사용하면 "unrecognized parameter" 라는 오류 발생합니다.
2. WITH 구문을 이용한 인라인 변수
WITH vars AS (
SELECT
'20250411'::date AS base_date,
1000 AS min_price
)
SELECT p.*, v.base_date
FROM products p
CROSS JOIN vars v
WHERE p.price > v.min_price
AND p.update_date = v.base_date;
WITH 구문을 통한 인라인 변수의 장점: 단일 쿼리 내에서 즉시 사용 가능 , 여러 변수를 동시에 정의 가능
반응형
3. 임시 테이블 활용 (세션 지속성)
-- 임시 테이블 생성
CREATE TEMP TABLE session_vars (
var_name TEXT PRIMARY KEY,
var_value TEXT
);
-- 초기값 설정
INSERT INTO session_vars VALUES
('base_date', '20250411'),
('max_price', '5000');
-- 변수 사용 예시
UPDATE products
SET price = price * 0.9
WHERE update_date = (SELECT var_value::date
FROM session_vars
WHERE var_name = 'base_date');
4. 함수 기반 변수 관리 시스템
-- 변수 설정 함수
CREATE OR REPLACE FUNCTION set_var(name TEXT, value TEXT)
RETURNS VOID AS $$
BEGIN
PERFORM set_config('app.' || name, value, false);
END;
$$ LANGUAGE plpgsql;
-- 변수 조회 함수 (기본값 지원)
CREATE OR REPLACE FUNCTION get_var(name TEXT, def_val TEXT)
RETURNS TEXT AS $$
BEGIN
RETURN coalesce(current_setting('app.' || name, true), def_val);
END;
$$ LANGUAGE plpgsql;
-- 사용 예시
SELECT set_var('discount_rate', '0.15');
SELECT product_price * get_var('discount_rate','0.1')::numeric AS discounted_price;
5. PL/pgSQL 블록 내 변수 사용
DO $$
DECLARE
target_date DATE := '20250411';
price_limit NUMERIC := 2000;
BEGIN
EXECUTE format('
UPDATE inventory
SET stock = stock - 1
WHERE restock_date = %L
AND unit_price > %s',
target_date, price_limit);
END $$;
이와같은 방법들로 변수를 지정해서 활용하면 좀더 동적이고, 간결한 쿼리를 작성할수 있습니다.
오늘도 조금이라도 쉽고 간결한 클린코드를 향해!
반응형
'Study > Database' 카테고리의 다른 글
PostgreSQL의 명시적 형변환 (0) | 2025.04.10 |
---|---|
<selectKey>의 활용법 (0) | 2024.10.03 |
SQL JOIN의 이해 (1) | 2024.10.02 |
Oracle에서 기본으로 제공하는 DD(Data Dictionary) (0) | 2024.08.19 |
CLOB에 대해서 알아보자. (0) | 2024.07.22 |