PostgreSQL의 파악하기 어려운 "열이 존재하지 않습니다" 오류: 사례 연구
Java 개발자는 데이터베이스에 열이 명확하게 정의되어 있는 경우에도 PostgreSQL에서 당황스러운 "열이 존재하지 않습니다" 오류가 자주 발생합니다. 이는 데이터베이스에서 직접 열 이름을 가져오는 동적 쿼리를 구성할 때 자주 발생합니다.
일반적인 상황을 살펴보겠습니다. 사용자가 "네트워크" 스키마에 있는 "국가" 테이블 내의 "대륙" 열에서 Null이 아니고 비어 있지 않은 값을 검색하려고 합니다. 초기 쿼리는 다음과 같습니다.
<code class="language-sql">SELECT Continent FROM network.countries WHERE Continent IS NOT NULL AND Continent <> '' LIMIT 5</code>
이 쿼리를 실행하면 실망스러운 오류가 발생합니다.
<code>org.postgresql.util.PSQLException: ERROR: column "continent" does not exist</code>
"countries.Continent"를 사용하라는 PostgreSQL의 제안은 오해의 소지가 있습니다. 왜냐하면 pgAdmin 4에 해당 열이 있다는 사실을 부인할 수 없기 때문입니다.
해결책: 이중 인용의 중요성
문제는 열 이름 주위에 큰따옴표가 없기 때문에 발생합니다. 동적 쿼리에서는 이름 충돌을 방지하기 위해 열 이름 주위에 큰따옴표를 사용하는 것이 필수적입니다. 이렇게 하면 PostgreSQL이 이름을 리터럴 문자열로 처리하여 잠재적인 오해를 방지할 수 있습니다.
큰따옴표를 포함하는 수정된 쿼리는 다음과 같습니다.
<code class="language-sql">SELECT "Continent" FROM network.countries WHERE "Continent" IS NOT NULL AND "Continent" <> '' LIMIT 5</code>
이 수정된 쿼리는 올바르게 실행되어 예상 결과(null이 아니고 비어 있지 않은 "Continent" 값)를 반환합니다. 이러한 일반적인 함정을 피하려면 동적 SQL에서 열 이름을 일관되게 큰따옴표로 묶어야 합니다.
위 내용은 열이 존재하는데도 PostgreSQL에서 '열이 존재하지 않습니다' 오류를 발생시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!