with time zone vs without time zone
CREATE OR REPLACE FUNCTION myfunc(param_time timestamp with time zone)
CREATE OR REPLACE FUNCTION myfunc(param_time timestamp without time zone)
with time zone
with time zone은 시간대 정보를 포함해야 하므로, 시간을 입력할 때 시간대가 포함된 형식을 사용해야합니다.
예를들어, 2025-04-17 12:00:00+09 처럼 시간을 입력하면 됩니다.
-- 함수 정의 예시
CREATE OR REPLACE FUNCTION myfunc(param_time timestamp with time zone, param_mode integer)
RETURNS int4
LANGUAGE sql
AS $function$
BEGIN
-- 예시로 입력된 param_time을 출력하는 쿼리
RETURN 0;
END;
$function$;
-- 함수 호출 예시
SELECT myfunc('2025-04-17 12:00:00+09', 1);
without time zone
without time zone은 시간대 정보가 포함되지 않은 시간만 다뤽 때문에, 단순히 날짜와 시간을 입력하면 됩니다.
-- 함수 정의 예시
CREATE OR REPLACE FUNCTION nyfunc(param_time timestamp without time zone, param_mode integer)
RETURNS int4
LANGUAGE sql
AS $function$
BEGIN
-- 예시로 입력된 param_time을 출력하는 쿼리
RETURN 0;
END;
$function$;
-- 함수 호출 예시
SELECT nyfunc('2025-04-17 12:00:00', 1);
current_timestamp사용시
without time zone이 시간대 정보를 입력하지 않아서 더 좋은것 같지만 current_timestamp를 사용시 문제가 발생합니다.
current_timestamp를 찍어보면 아래와같이 timezone 형태로 찍힙니다.
select current_timestamp
-- 실행결과 => 2025-04-17 17:39:24.763 +0900
그래서 without time zone형식으로 current_timestamp를 파라미터로 받을시 형변환 에러가 발생합니다.
SQL Error [42883]: 오류: myfunc(timestamp with time zone) 이름의 함수가 없음
Hint: 지정된 이름 및 인자 자료형과 일치하는 함수가 없습니다. 명시적 형변환자를 추가해야 할 수도 있습니다.
Position: 8
Error position: line: 1 pos: 7
반면에, with time zone형식은 current_timestamp형식은 당연히 잘 작동되고
또한 without time zone 형식으로 파라미터를 줘도 알아서 형변환을 해주기때문에 에러가 나지 않습니다!
select myfunc(current_timestamp); -- 작동잘됨
select myfunc('2025-04-17 17:00:00'); -- 작동잘됨
select myfunc('2025-04-17'); -- 작동잘됨
반응형
'서버&백엔드 > 🗃️ DataBase' 카테고리의 다른 글
InfluxDB | 설치 (0) | 2025.05.14 |
---|---|
PostgreSQL | Record 타입 사용해보기 (0) | 2025.04.18 |
PostgreSQL에서 idle vs idle in transaction 상태 차이 (0) | 2025.02.13 |
관계형DB(RDB) vs 비관계형 DB(NoSQL) (0) | 2025.02.03 |
정규화 과정 (1) | 2025.01.21 |