2026년 08월 12일 | DBMS Error 가이드
이 글에서 다루는 내용
22P06 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
22P06 nonstandard use of escape character 는?
PostgreSQL 에러 코드 22P06은 nonstandard_conforming_strings 설정이 비활성화된 환경에서 백슬래시(\)를 이스케이프 문자로 사용할 때 발생하는 경고성 에러입니다. SQL 표준에서는 일반 문자열 리터럴 내의 백슬래시를 특별한 의미 없이 그대로 처리해야 하지만, PostgreSQL의 과거 동작 방식에서는 백슬래시를 이스케이프 시퀀스로 해석하는 비표준 방식을 사용해왔습니다. 이 에러는 주로 레거시 애플리케이션을 최신 PostgreSQL 버전으로 마이그레이션하거나, escape_string_warning 설정이 활성화된 환경에서 구형 SQL 쿼리를 실행할 때 자주 목격됩니다.
주요 발생 원인
nonstandard_conforming_strings가 OFF인 상태에서 백슬래시 사용
PostgreSQL 9.1 버전 이전에는 standard_conforming_strings가 기본값으로 off로 설정되어 있었으며, 이로 인해 일반 작은따옴표 문자열 내에서 \n, \t 같은 백슬래시 이스케이프 시퀀스가 자동으로 해석되었습니다. 현재는 기본값이 on으로 변경되었지만, 오래된 설정 파일이나 명시적으로 off로 지정한 환경에서 기존 쿼리를 실행하면 이 에러가 발생합니다. 특히 escape_string_warning이 on으로 설정된 경우, 해당 상황에서 PostgreSQL은 경고 메시지를 출력합니다.
- 레거시 애플리케이션 및 ORM에서 생성된 쿼리의 백슬래시 처리
오래된 PHP, Python, Ruby 기반의 웹 애플리케이션이나 Hibernate 같은 일부 ORM 프레임워크는 문자열 내 특수문자를 처리할 때 백슬래시를 이스케이프 문자로 사용하는 코드를 생성하는 경향이 있습니다. 이러한 애플리케이션들은 PostgreSQL의 비표준 이스케이프 동작에 의존하여 개발되었기 때문에, standard_conforming_strings=on 환경에서는 의도치 않은 동작이나 이 에러를 유발할 수 있습니다. 데이터베이스 드라이버 버전이 낮거나 업데이트되지 않은 경우에도 동일한 문제가 발생합니다.
- 파일 경로나 정규표현식에서의 백슬래시 직접 입력
Windows 파일 경로(C:\Users\data)나 정규표현식 패턴을 SQL 문자열로 직접 삽입할 때 백슬래시를 이스케이프 처리 없이 그대로 사용하는 경우가 많습니다. 이러한 상황에서 PostgreSQL은 백슬래시를 이스케이프 시퀀스의 시작으로 인식하려 하고, 표준 모드에서는 이를 비표준 사용으로 간주하여 경고 또는 에러를 발생시킵니다. 특히 DBA가 직접 작성하는 관리용 스크립트에서 이런 실수가 빈번하게 발생합니다.
해결 방법
원인 1 해결: E” 이스케이프 문자열 문법 사용 또는 표준 문자열로 전환
백슬래시 이스케이프를 의도적으로 사용해야 한다면 PostgreSQL 전용 E'' 문법을 명시적으로 사용하고, 그렇지 않다면 표준 문자열 리터럴로 전환하세요.
-- 잘못된 방법 (비표준, 경고 발생 가능)
SELECT 'Hello\nWorld';
-- 올바른 방법 1: E'' 문법으로 이스케이프 의도를 명시
SELECT E'Hello\nWorld';
-- 올바른 방법 2: 표준 SQL 방식으로 줄바꿈 처리
SELECT 'Hello' || chr(10) || 'World';
-- 현재 설정 확인
SHOW standard_conforming_strings;
SHOW escape_string_warning;
-- 세션 레벨에서 표준 모드 활성화 (권장)
SET standard_conforming_strings = on;
원인 2 해결: 데이터베이스 및 세션 설정 조정
레거시 애플리케이션의 즉각적인 수정이 어렵다면 임시방편으로 설정을 조정할 수 있지만, 장기적으로는 애플리케이션 코드를 수정하는 것이 바람직합니다.
-- postgresql.conf 레벨 설정 확인 (슈퍼유저 권한 필요)
SHOW escape_string_warning;
-- 경고를 일시적으로 비활성화 (운영 환경에서는 주의 필요)
SET escape_string_warning = off;
-- 특정 데이터베이스에만 설정 적용
ALTER DATABASE myapp_db SET standard_conforming_strings = on;
ALTER DATABASE myapp_db SET escape_string_warning = off;
-- 특정 롤(사용자)에게 설정 적용
ALTER ROLE app_user SET standard_conforming_strings = on;
-- 설정 적용 확인
SELECT name, setting, source
FROM pg_settings
WHERE name IN ('standard_conforming_strings', 'escape_string_warning');
원인 3 해결: 파일 경로 및 정규표현식에서 올바른 이스케이프 사용
-- 잘못된 방법: Windows 경로 직접 입력
SELECT * FROM files WHERE path = 'C:\Users\postgres\data';
-- 올바른 방법 1: 백슬래시 이중 처리 (E'' 문법과 함께)
SELECT * FROM files WHERE path = E'C:\\Users\\postgres\\data';
-- 올바른 방법 2: 슬래시로 대체 (PostgreSQL은 슬래시도 인식)
SELECT * FROM files WHERE path = 'C:/Users/postgres/data';
-- 정규표현식에서의 올바른 백슬래시 처리
-- 잘못된 방법
SELECT * FROM logs WHERE message ~ '\d+';
-- 올바른 방법: E'' 문법 사용
SELECT * FROM logs WHERE message ~ E'\\d+';
-- 또는 $$ dollar quoting 사용 (정규표현식에 매우 유용)
SELECT * FROM logs WHERE message ~ $$\d+$$;
-- LIKE 패턴에서 백슬래시 처리
SELECT * FROM docs WHERE content LIKE E'100\\%' ESCAPE '\';
예방 방법
postgresql.conf에서 표준 모드를 명시적으로 활성화하고 코드 리뷰 프로세스에 포함시키기
모든 PostgreSQL 인스턴스의 postgresql.conf 파일에 standard_conforming_strings = on과 escape_string_warning = on을 명시적으로 설정하여 비표준 이스케이프 사용을 조기에 감지하도록 합니다. 또한 신규 SQL 코드 작성 시 팀 내 코드 리뷰 가이드라인에 “일반 문자열 리터럴에서 백슬래시 사용 금지, 반드시 E'' 문법 또는 달러 인용($$) 방식 사용”을 포함시켜 배포 전에 문제를 차단하세요.
- 애플리케이션 레벨에서 파라미터화된 쿼리(Prepared Statement) 사용 의무화
SQL 인젝션 방지와 이스케이프 문제를 동시에 해결하는 가장 효과적인 방법은 파라미터화된 쿼리를 사용하는 것입니다. 애플리케이션 코드에서 문자열을 직접 SQL에 삽입하는 방식을 금지하고, 모든 사용자 입력값은 바인딩 파라미터로 처리하도록 개발 표준을 수립하세요. 이 방식은 데이터베이스 드라이버가 이스케이프 처리를 자동으로 담당하므로 22P06 에러 자체가 발생할 여지를 원천 차단합니다.
관련 에러
- 22025 (
invalid_escape_sequence): 유효하지 않은 이스케이프 시퀀스를 사용했을 때 발생하며, 22P06과 함께 나타나는 경우가 많습니다. E” 문법 사용 시 잘못된 이스케이프 코드를 입력하면 이 에러로 이어집니다. - 22021 (
character_not_in_repertoire): 문자 인코딩과 관련된 에러로, 이스케이프 처리 과정에서 잘못된 문자가 생성될 때 연관되어 발생할 수 있습니다. - 42601 (
syntax_error): 이스케이프 문자 오용으로 인해 SQL 파서가 문자열의 끝을 잘못 인식할 경우 구문 에러로 이어질 수 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.