PostgreSQL은 대소 문자를 구분하는 데이터베이스를 만들 수 있습니까?


10

일부 버전의 Sybase에서 PostgreSQL로 코드를 이식하고 있습니다. Sybase 클라이언트 라이브러리를 사용하는 C 애플리케이션입니다. 내 접근 방식은 호출 dbsqlexec()PQexec()(예 :)로 변환하는 변환 계층을 작성하는 것 입니다. 그 부분은 대부분 작동합니다.

Sybase 데이터베이스는 데이터베이스 개체 이름과 관련하여 대 / 소문자를 구분하여 설정 한 것으로 보입니다. 예를 들어, WIDGET테이블과 테이블 이 모두 widget있습니다. 이 응용 프로그램의 규칙은 모든 대문자 이름이 실제 데이터 테이블을 나타내는 반면 소문자 이름은 일부 처리를 실행할 때 임시 테이블로 사용된다는 것입니다.

4.1 Lexical Structure 에 따르면 " 키워드와 따옴표가없는 식별자는 대소 문자를 구분하지 않습니다. "나는 식별자를 큰 따옴표로 묶어 소문자로 자동 접기를 비활성화 할 수 있다는 것을 알고 있습니다. 이 데이터베이스를 사용하는 코드

데이터베이스 객체 식별자에 대해 자동 케이스 접기를 비활성화하도록 PostgreSQL을 설정하는 방법이 있습니까?

내 대안은 각 SQL 문을 검사하고 키워드가 아닌 모든 식별자 주위에 큰 따옴표를 넣는 코드를 작성하는 것입니다.


큰 따옴표로 묶으면 키워드 를 식별자로 사용할 있습니다. 그렇게하지 않아도됩니다. 어쨌든 Sybase 코드베이스의 일부 식별자가 PostgreSQL의 키워드가 아닌지 확신 할 수 없습니다. 식별자를 큰 따옴표로 묶거나 이름을 바꾸는 더 많은 이유가 있습니다.
Erwin Brandstetter

postgres의 인용되지 않은 식별자는 실제로 대소 문자를 구분하지 않으며 모두 소문자로 처리됩니다. 따라서 tAbLeNaMe는 tablename이라는 단일 테이블과 일치하지만 tableName이라는 단일 테이블과는 일치하지 않습니다. 그렇지 않으면 사람들이 ""을 잊어 버려 실수로 소문자 버전에 액세스하게되므로 테이블 이름을 변경합니다.
JamesRyan

@JamesRyan : 그건 잘못이야. select * from TaBlEnAmE다음과 같은 표를 참조 select * from tablename하거나select * from TABLENAME
a_horse_with_no_name

@a_horse_with_no_name : 그렇다면 create table "tableName" (id integer primary key);, create table "tablename" (id integer primary key);이 쿼리 select * from TaBlEnAmE;는 "tableName"이 아니라 "tablename"에서 선택합니다. "인용되지 않은 이름은 항상 소문자로 접 힙니다 . "
Mike Sherrill 'Cat Recall'1

답변:


3

결국 응용 프로그램에서 생성 된 SQL을 PostgreSQL 호환 SQL로 변환하는 코드를 작성했습니다. 매우 간단합니다.

  • 작은 따옴표로 묶인 문자열 리터럴을 생략하고 문장을 적절한 토큰으로 분할
  • 키워드 나 숫자가 아닌 것을 큰 따옴표로 묶습니다

또한이 레이어를 사용하여 호출을 isnull로 변환 했습니다 coalesce. 지금까지는 잘 작동하고 있습니다.


내가 그것을 대소 문자를 구별하게 따옴표 ( "blahblablah")를 사용 .. 나를 위해 부드럽게 작동 ..
아누 즈 파텔

1

데이터베이스 객체 식별자에 대해 자동 케이스 접기를 비활성화하도록 PostgreSQL을 설정하는 방법이 있습니까?

직접 아닙니다. 당신은 수도 에 상대적으로 작은 변화 할 수있을 PostgreSQL의 소스 코드를 , 그리고 다시 컴파일. (src / backend / parser / parser.c에서 시작 하시겠습니까?) 그러나 그것이 매우 단순하다면 놀랄 것입니다.


소스 코드를 망칠 필요는 없습니다. 소스 코드가 변경 될 때마다 PostgreSQL 설치에 대한 사용자 정의 변경이 필요하기 때문에 (호스트, 버전 등) 바이너리 설치를 사용할 수 없습니다.
Greg Hewgill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.