PostgreSQL 열 이름은 대소 문자를 구분합니까?


157

personsPostgres에서 열 이름이 say 인 다른 팀이 전달한 db 테이블이 "first_Name"있습니다. 이제 PG Commander를 사용 하여이 column-name 에서이 테이블을 쿼리하려고합니다.

select * from persons where first_Name="xyz";

그리고 그것은 단지 반환

오류 : "first_Name"열이 존재하지 않습니다

내가 어리석은 일을하고 있는지 또는 내가 누락 된이 문제에 대한 해결 방법이 있는지 확실하지 않습니까?

답변:


284

큰 따옴표로 묶지 않은 모든 식별자 (열 이름 포함)는 PostgreSQL에서 소문자로 접 힙니다. 큰 따옴표로 작성되어 대문자 (및 / 또는 다른 구문 위반)를 유지하는 열 이름은 나머지 수명 동안 큰 따옴표로 묶어야합니다. ( "first_Name")

그래서, , PostgreSQL의 열 이름은 대소 문자를 구분합니다 :

SELECT * FROM persons WHERE "first_Name" = 'xyz';

주변의 따옴표를 수정하십시오 'xyz'. (문자열 리터럴)은 작은 따옴표로 묶습니다 .

여기에서 설명서를 읽으십시오.

저의 충고는 법률적인 소문자 이름 만 사용하므로 큰 따옴표는 필요하지 않습니다.


4
@ArtB : SQL 표준은 Postgres가 구현하는 것처럼 대소 문자를 구분하지 않는 식별자를 정의합니다. 유일한 편차 : 인용되지 않은 식별자는 표준에서 대문자로 접히지 만 pg는 큰 따옴표가없는 모든 것을 소문자로 표시합니다. (드문 경우에만 관련이 있습니다.) 여기에 매뉴얼의 세부 사항이 있습니다.
Erwin Brandstetter

1
@ adfs : 나는 내가 이미 한 것보다 더 잘 설명 할 수 없다고 생각합니다. 자세한 내용은 반복해서 제공 한 설명서 링크를 따르십시오.
Erwin Brandstetter

15
@adfs : SQL에서, foobar, FOOBAR및는 FooBar동일한 식별자이다. 그러나 "foobar", "FooBar"그리고 "FOOBAR"서로 다른 식별자입니다
a_horse_with_no_name

5
네,하지만 SQL에서 @a_horse_with_no_name foobarFOOBAR동일합니다 "FOOBAR"potgresql에서, FOOBAR그리고 foobar등과 동일합니다 "foobar".
Jasen

1
@KamelMili : 필요한 정보를 모두 제공 하여 질문으로 질문 하는 것이 좋습니다 . 의견은 장소가 아닙니다. 상황에 따라 언제든지이 답변에 연결할 수 있습니다. 그리고 당신은 여기에 당신의 관련 질문에 대한 링크로 의견을 남길 수 있습니다 (내 관심을 끌기 위해).
Erwin Brandstetter

16

설명서 를 인용하려면 :

키워드 및 따옴표없는 식별자는 대소 문자를 구분하지 않습니다. 따라서:

UPDATE MY_TABLE SET A = 5;

다음과 같이 쓸 수 있습니다 :

uPDaTE my_TabLE SeT a = 5;

인용 된 식별자를 사용하여 작성할 수도 있습니다 .

UPDATE "my_table" SET "a" = 5;

인용 부호를 인용하면 대소 문자를 구분하지만 인용 부호없는 이름은 대문자로 접는 SQL 표준과 달리 인용 부호없는 이름은 항상 소문자로 접 힙니다. 예를 들어, 식별자 FOO, foo"foo"PostgreSQL을하여 동일한 것으로 간주되지만, "Foo""FOO"이들 세 가지 서로 다르다.

휴대용 응용 프로그램을 작성하려면 항상 특정 이름을 인용하거나 인용하지 않는 것이 좋습니다.


8

PostgresQL에서 대소 문자를 혼합 한 열 이름은 큰 따옴표로 묶어야합니다. 따라서 최선의 관례는 모든 작은 경우를 밑줄로 따르는 것입니다.


2
이것은 @ erwin-brandstetter의 설명에 따라 잘못되었습니다
Michael Silver

9
이것이 어떻게 잘못 되었습니까? 대소 문자가 혼합 된 열 이름이있는 경우이를 참조하려면 식별자를 큰 따옴표로 묶어야합니다.
theferrit32
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.