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

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

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



답변

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

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

로부터 문서 :

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


답변

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

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

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

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

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

EG

1.

select * from schema_name.order;

2.

select * from "order";

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


답변