답변:
미세의 당 문서 , 나는 생각 이 당신이 찾고있는 무슨 수 있습니다.
SQL ID 및 키워드는 문자 (az, 분음 부호 및 비 라틴 문자가있는 문자) 또는 밑줄 (_)로 시작해야합니다. 식별자 또는 키워드의 후속 문자는 문자, 밑줄, 숫자 (0-9) 또는 달러 기호 ($) 일 수 있습니다. SQL 표준의 문자에 따라 식별자에 달러 기호를 사용할 수 없으므로 사용하면 응용 프로그램의 이식성이 떨어질 수 있습니다 ...
pg_Nathan C에서 언급 한 것처럼 해당 링크 에 밑줄 을 추가 할 수 있습니다 .
documentation 에 따르면 pg_예약 된대로 시작할 수도 없습니다 . 그 외에는 상당히 자유 로워 보입니다.
this-is schema지정할 수 있으며 여전히 유효하지 않은 스키마 이름입니다.
정답은 gsiems에서 제공하는 것입니다. 그러나 PostgreSQL에는 명심해야 할 인용 식별자에 대한 규칙이 있습니다. "따옴표 붙은 식별자는 코드가 0 인 문자를 제외한 모든 문자를 포함 할 수 있습니다. (큰 따옴표를 포함하려면 두 개의 큰 따옴표를 쓰십시오.)"... 보려는 경우에 대한 제한도 있습니다.
따라서 식별자를 인용하려는 경우 원하는 문자를 사용할 수 있습니다 (\ 0 제외). 그러나 식별자를 인용하지 않으면 해당 페이지에 요약 된 규칙을 따라야합니다.
나는 주로 인용하기 때문에 이것을 지적하고 싶었다. 특히 인용되지 않은 식별자의 케이스에 관한 규칙 (그리고 스키마 이름은 식별자로 계산된다).
최신 정보:
예를 들어 (스키마 식별자에는 적용 할 수 없지만 동일하게 적용 할 수 있음) :
DROP TABLE "tbluser"; -- assuming it exists
DROP TABLE "TBLUSER"; -- assuming it exists; incidentally, they are two different tables
CREATE TABLE "TBLUSER" ( username text );
INSERT INTO "TBLUSER" VALUES ( 'joe' );
SELECT * FROM TBLUSER; -- this returns an error that the tbluser relation does not exist
SELECT * FROM "TBLUSER"; -- works fine
이것은 PostgreSQL (그리고 아마도 SQL 표준)에 경험이있는 사람들에게는 예상되는 행동 일 수 있지만 PG를 처음 사용하고 다른 데이터베이스 서버 (예 : SQL Server 또는 Oracle)의 관점에서 오는 사람은이 행동에 부딪 칠 수 있습니다. 그들이 방금 만든 테이블이없는 이유가 궁금합니다.
아마도 일부 매뉴얼은 인용 식별자 사용을 권장하지 않지만 중요한 사실은 인용 식별자를 사용할 수 있고 사용할 수 있다는 것입니다. 또한 많은 패키지는 인용되지 않은 관계를 생성하고 액세스 할 때 항상 인용 식별자를 사용하는 정책으로 만듭니다. 소문자 (예 : PGAdmin III).
예를 들어, UI를 통해 테이블을 생성 할 때 PGAdmin III에서 생성 한 스크립트입니다.
CREATE TABLE public."TBLUSER"
(
username text
)
WITH (
OIDS = FALSE
)
;
따라서 사용자가 쿼리에서이 테이블에 액세스 할 수있는 유일한 방법은 인용 된 식별자, 즉를 참조하는 것 "TBLUSER"입니다. 인용 부호가없는 식별자로 쿼리에서이 테이블에 액세스하려고하면 관계를 찾을 수 없습니다 (예 :) TBLUSER.