Postgres 노드 일반적인 문제
Postgres 노드에서 발생하는 일반적인 오류와 문제, 그리고 해결 또는 트러블슈팅 방법을 설명합니다. Postgres에서는 SQL IN 비교 구문을 사용하여 값 그룹 간 비교를 수행할 수 있습니다: 쿼리에서 n8n 표현식(expressions)을 사용해 IN 그룹의 값을 동적으로 채울 수 있습니다.
Postgres 노드에서 발생하는 일반적인 오류와 문제, 그리고 해결 또는 트러블슈팅 방법을 설명합니다.
SQL IN 그룹에 파라미터로 동적 값 채우기#
Postgres에서는 SQL IN 비교 구문을 사용하여 값 그룹 간 비교를 수행할 수 있습니다:
SELECT color, shirt_size FROM shirts WHERE shirt_size IN ('small', 'medium', 'large');
쿼리에서 n8n 표현식(expressions)을 사용해 IN 그룹의 값을 동적으로 채울 수 있습니다. 여기에 쿼리 파라미터(query parameters)를 함께 활용하면 입력값을 자동으로 검증하여 추가적인 보안을 제공합니다.
쿼리 파라미터를 사용하여 IN 그룹 쿼리를 구성하는 방법:
- Operation을 Execute Query로 설정합니다.
- Options에서 Query Parameters를 선택합니다.
- 표현식을 사용하여 입력 데이터에서 배열을 선택합니다. 예:
{{ $json.input_shirt_sizes }}. - Query 파라미터에서 빈 괄호를 포함한
IN구문으로 쿼리를 작성합니다. 예:SELECT color, shirt_size FROM shirts WHERE shirt_size IN (); IN괄호 안에 표현식을 사용하여 쿼리 파라미터 배열의 항목 수에 맞는 인덱스 기반 플레이스홀더(예:$1,$2,$3)를 동적으로 생성합니다. 플레이스홀더 변수는 1부터 시작하므로 각 배열 인덱스에 1을 더하면 됩니다:SELECT color, shirt_size FROM shirts WHERE shirt_size IN ({{ $json.input_shirt_sizes.map((i, pos) => "$" + (pos+1)).join(', ') }});
이 방법을 사용하면 n8n이 배열의 항목 수에 맞게 IN 값에 대한 올바른 수의 prepared statement 플레이스홀더를 자동으로 생성합니다.
타임스탬프 및 타임존 처리#
n8n과 Postgres가 타임스탬프 및 타임존 데이터를 해석하는 방식에서 발생하는 복잡성을 피하려면 다음 일반적인 권장 사항을 따르세요:
- 날짜 저장 및 전달 시 UTC 사용: UTC를 사용하면 서로 다른 표현 방식과 시스템 간에 날짜를 변환할 때 타임존 변환으로 인한 혼란을 방지할 수 있습니다.
- 실행 타임존 설정: 환경 변수(self-hosted의 경우) 또는 설정(n8n Cloud의 경우)에서 n8n의 전역 타임존을 설정합니다. 워크플로우별 타임존은 워크플로우 설정에서 설정할 수 있습니다.
- ISO 8601 형식 사용: ISO 8601 형식은 일, 월, 연도, 시간, 분, 초를 표준화된 문자열로 인코딩합니다. n8n은 노드 간에 날짜를 문자열로 전달하며 Luxon을 사용하여 날짜를 파싱합니다. ISO 8601로 명시적으로 변환해야 하는 경우 Date & Time 노드와
yyyy-MM-dd'T'HH:mm:ss문자열로 설정된 커스텀 형식을 사용할 수 있습니다.
Date 컬럼을 ISO datetime 문자열 대신 날짜 문자열로 출력하기#
n8n은 pg 패키지를 사용하여 Postgres와 연동하며, 이는 n8n이 Postgres의 date, timestamp 및 관련 타입을 처리하는 방식에 영향을 줍니다.
pg 패키지는 기본적으로 DATE 값을 new Date(row_value)로 파싱하며, 이는 ISO 8601 datetime 문자열 형식을 따르는 날짜를 생성합니다. 예를 들어 2025-12-25라는 날짜는 인스턴스의 타임존 설정에 따라 2025-12-25T23:00:00.000Z와 같은 datetime 문자열을 생성할 수 있습니다.
이를 해결하려면 Postgres TO_CHAR 함수를 사용하여 쿼리 시점에 날짜를 원하는 형식으로 변환하세요:
SELECT TO_CHAR(date_col, 'YYYY-MM-DD') AS date_col_as_date FROM table_with_date_col
이렇게 하면 시간이나 타임존 구성 요소 없이 날짜를 문자열로 출력합니다. 앞선 예시를 계속하면, 이 변환을 적용했을 때 2025-12-25라는 날짜는 2025-12-25 문자열을 반환합니다. 자세한 내용은 pg 패키지의 날짜 관련 문서를 참조하세요.
