Postgres에서 키워드와 같은 열 이름 탈출


134

Postgres 테이블의 열에 name이 있으면 year어떻게 INSERT해당 열의 값을 설정하기 위해 쿼리를 보아야 합니까?

예 : 연도 단어 INSERT INTO table (id, name, year) VALUES ( ... );근처에 오류가 발생합니다 .

답변:


211

키워드year 로 해석되는 것을 막으려면 간단히 큰 따옴표로 묶으십시오 .

INSERT INTO table (id, name, "year") VALUES ( ... );

로부터 문서 :

구분 식별자 또는 인용 식별자와 같은 두 번째 종류의 식별자가 있습니다. 임의의 문자 시퀀스를 큰 따옴표 ( ")로 묶어 구성합니다. 구분 식별자는 항상 식별자이며 키워드는 아니므로"select "는"select "라는 열 또는 테이블을 나타내는 데 사용할 수 있습니다. 인용되지 않은 선택은 키워드로 간주되므로 테이블 또는 열 이름이 예상되는 경우 구문 분석 오류가 발생합니다.


44
경고 : PostgreSQL은 따옴표없이 모든 식별자를 소문자로 접습니다. MyTable, myTablemytable단지 동일합니다. 함께 따옴표이 폴딩은 수행되지 않습니다. 따라서 "MyTable"더 이상 동일하지 않습니다 mytable.
AH

19
더 나은 방법은 예약 어나 대소 문자를 식별자로 사용하지 말고 큰 따옴표를 사용하거나 이상한 오류 메시지를받지 않아도됩니다.
Erwin Brandstetter


8
@ErwinBrandstetter 문제는 기존 프로젝트에서 작업 할 때 발생합니다.
ceruleus

5
@ HoàngLong 그렇습니다. update "user" set "password" = 'value...';완벽하게 작동합니다 ...
Phill

0

필드 / 열에 따옴표를 제공하지 않으면 기본적으로 Postgres에서 소문자로 표시됩니다. 그리고 Postgres는 열 이름과 관련하여 키워드 확인을 건너 뜁니다.

귀하의 경우에는에 관해서는 따옴표를 반드시 추가해야한다고 생각하지 않습니다 columns. 당신이 사용하는 경우 그러나 keywords의 이름으로 (포스트 그레스에 의해 등록) Table, Schema, Function또는 Trigger등, 당신도 큰 따옴표를 사용하는 데 필요한, 또는 당신은 도트 연결과 스키마 이름을 지정할 수 있습니다.

order 가 Postgres에 의해 등록 된 키워드 라고 가정 해 봅시다 . 일부 시나리오에서는이 키워드를 테이블 이름으로 사용해야합니다.

이때 Postgres에서을 사용하여 테이블을 만들 수 있습니다 keywords. 이것이 Postgres의 아름다움입니다.

주문 테이블에 액세스하려면 큰 따옴표를 사용해야하거나 테이블 이름 앞에 스키마 이름을 지정할 수 있습니다.

EG

1.

select * from schema_name.order;

2.

select * from "order";

마찬가지로이 유형의 조합을 사용할 수 있습니다. 이것이 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.