PI_PO

PostgreSQL Error: Column <대문자 컬럼> does not exist in table <대문자 테이블> 해결 방법

피오농부 2025. 3. 18. 03:48
반응형

SAP PO 프로젝트에서 PostgreSQL 연동 시 발생하는 에러

SAP PO(프로세스 오케스트레이션) 프로젝트를 진행하다 보면 PostgreSQL과 같은 다양한 데이터베이스(DB)와 연동해야 하는 경우가 있습니다.
일반적으로 Oracle이나 MS-SQL을 주로 사용하지만, 최근 PostgreSQL과 연계 작업을 하면서 기존 DB에서 볼 수 없었던 특이한 에러를 경험하게 되었습니다.

특히, 컬럼(Column) 및 테이블(Table) 대소문자 처리 방식 차이로 인해 다음과 같은 에러가 발생할 수 있습니다.

java.sql.SQLException: FATAL ERROR: Column <대문자 컬럼> does not exist in table <대문자 테이블>

PostgreSQL 컬럼 대소문자 오류의 원인

PostgreSQL에서는 기본적으로 모든 테이블과 컬럼명을 소문자로 변환하여 처리합니다.
따라서, SAP PO 인터페이스에서 대문자로 정의된 필드를 그대로 사용하면, 존재하지 않는 컬럼으로 인식하여 오류가 발생할 수 있습니다.

예를 들어, 테이블이 다음과 같이 정의되어 있다고 가정해봅시다.

CREATETABLE example_table ( id SERIAL PRIMARY KEY, UserName VARCHAR(255) );

이때, 다음과 같은 SQL을 실행하면 PostgreSQL에서 에러가 발생합니다.

SELECT UserName FROM example_table;

PostgreSQL은 내부적으로 위 SQL을 소문자로 변환하여 실행하므로, username 컬럼이 없다고 판단하고 에러를 반환합니다.

PostgreSQL 대소문자 컬럼 오류 해결 방법

1. 컬럼 및 테이블명을 소문자로 변환

SAP PO의 DataType 정의 시 대문자로 설정된 컬럼명을 소문자로 변경하면 정상적으로 데이터베이스와 연동됩니다.

예를 들어, 대문자 컬럼명을 소문자로 변경하여 다시 실행하면 문제없이 처리됩니다.

SELECT username FROM example_table;

2. 대문자를 유지하고 싶다면 쌍따옴표("")로 감싸기

PostgreSQL에서 컬럼명을 대문자로 유지하려면 반드시 쌍따옴표("")로 감싸야 합니다.

SELECT "UserName" FROM example_table;

단, 이 방식은 SQL 문을 작성할 때 항상 대소문자를 구분해야 하므로 유지보수가 어렵습니다.
가능하면 모든 테이블 및 컬럼명을 소문자로 정의하는 것이 권장됩니다.

추가 오류: 권한 문제 (permission denied for relation <테이블>)

PostgreSQL을 사용할 때 다음과 같은 권한 오류가 발생할 수도 있습니다.

org.postgresql.util.PSQLException: ERROR: permission denied for relation <테이블>

이 오류는 DB 사용자에게 해당 테이블에 대한 접근 권한이 없을 때 발생합니다.
해결 방법은 레거시 시스템 또는 DB 관리자에게 권한을 요청하는 것입니다.

예를 들어, 특정 사용자에게 테이블 읽기 권한을 부여하려면 다음 SQL을 실행하면 됩니다.

GRANTSELECTON example_table TO sap_user;

결론

PostgreSQL을 사용할 때 컬럼 및 테이블명이 자동으로 소문자로 변환된다는 점을 고려해야 합니다.
SAP PO 연동 시 대문자 컬럼명을 사용할 경우 에러가 발생할 수 있으며, 이를 해결하려면:

컬럼명을 소문자로 변환하여 사용
대문자를 유지하려면 쌍따옴표("")로 감싸기
권한 오류 발생 시 DB 관리자에게 권한 요청

PostgreSQL과 SAP PO를 연동할 때 이러한 차이를 이해하고 대응하면 보다 원활한 데이터베이스 연동이 가능합니다. 🚀

반응형