source

Postgres 대소문자 구분

manycodes 2023. 6. 30. 22:29
반응형

Postgres 대소문자 구분

나는 모든 테이블과 대문자 열을 생성하는 도구를 통해 MSSql 서버 2008에서 Postgres에 있는 100개의 테이블을 가져왔습니다.이제 테이블에서 데이터 보기를 만들려면 예를 들어 - STD_TYPE_CODEs -

select * from STD_TYPE_CODES

다음과 같은 오류가 발생합니다.

ERROR:  relation "std_type_codes" does not exist
LINE 1: select * from STD_TYPE_CODES
                  ^
********** Error **********
ERROR: relation "std_type_codes" does not exist
SQL state: 42P01
Character: 15

테이블 이름에 따옴표를 붙일 수 있다는 걸 압니다.

select * from "STD_TYPE_CODES"

하지만 MSSql Server와 함께 작업했기 때문에 그런 문제는 없습니다.그래서 이것을 없앨 방법이 없을까요?제발 도와주세요.

포스트그레에서따옴표로 묶지 않은 SQL 이름은 대소문자를 구분하지 않습니다.따라서SELECT * FROM hello그리고.SELECT * FROM HELLO동등합니다.

그러나 따옴표로 묶은 이름은 대소문자를 구분합니다. SELECT * FROM "hello" 동등하지 않습니다.SELECT * FROM "HELLO".

따옴표로 묶은 이름과 따옴표로 묶지 않은 이름 사이에 "브리지"를 만들기 위해 따옴표로 묶지 않은 이름은 암시적으로 소문자로 구분됩니다.hello,HELLO그리고.HeLLo와 동등합니다."hello"하지만 그렇지는 않습니다."HELLO"또는"HeLLo"(아이고!)

따라서 Postgre에서 도면요소(테이블, 뷰, 프로시저 등)를 작성할 때SQL, 따옴표로 묶지 않거나 따옴표로 묶지만 소문자로 지정해야 합니다.


기존 테이블/뷰/등을 변환하려면 다음과 같은 방법을 사용할 수 있습니다.ALTER TABLE "FOO" RENAME TO "foo".

또는 MSSQL에서 덤프를 "Postgre"로 수정합니다.SQL 호환"(다음을 포함하도록 함)foo상심한"foo"하지만 아닌"FOO".

  • 덤프 파일을 명시적으로 편집하는 방법 중 하나입니다. (리눅스를 선택할 수 있습니다.sed -r 's/"[^"]+"/\L\0/g' dumpfile그러나 이 명령은 문자열 리터럴의 텍스트도 수정할 수 있습니다.)
  • 또는 MSSQL에서 덤프를 가져올 때 몇 가지 옵션을 지정함으로써. (MSSQL에 그런 옵션이 있는지는 잘 모르겠지만, 사용한 적은 없지만, 아마도 그런 옵션이 존재해야 할 것입니다.)

언급URL : https://stackoverflow.com/questions/21796446/postgres-case-sensitivity

반응형