본문 바로가기
Study/Database

PostgreSQL에서의 쿼리문 변수 사용법

by 얏옹이 2025. 4. 11.
반응형

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