이름 및 식별자
이름은 사용자와 암호 외에도 테이블이나 열 같은 데이터베이스 객체를 식별하는 역할을 합니다. 이름과 식별자는 서로 통용되는 용어입니다. 식별자는 표준 식별자와 인용 또는 구분 식별자, 2가지 유형이 있습니다. 또한 인쇄 가능한 UTF-8 문자로만 구성되어야 합니다. 표준 및 구분 식별자의 ASCII 문자는 대/소문자를 구분하지 않고 데이터베이스에서 모두 소문자로 변환됩니다. 쿼리 결과에서 열 이름은 기본적으로 소문자로 반환됩니다. 열 이름을 대문자로 반환하려면 describe_field_name_in_uppercase 구성 파라미터를 true
로 설정하십시오.
표준 식별자
표준 SQL 식별자는 규칙 집합을 준수하고, 다음과 같이 따라야 합니다.
-
ASCII 단일 바이트 알파벳 문자 또는 밑줄 문자나, 2~4바이트 길이의 UTF-8 멀티바이트 문자로 시작합니다.
-
후속 문자는 ASCII 단일 바이트 영숫자 문자, 밑줄 또는 달러 기호, 혹은 2~4바이트 길이의 UTF-8 멀티바이트 문자가 될 수 있습니다.
-
길이는 1~127바이트가 되어야 하며, 여기에 구분 식별자의 인용 부호는 포함되지 않습니다.
-
인용 부호나 공백이 포함되어서는 안 됩니다.
-
예약된 SQL 키워드가 되어서는 안 됩니다.
구분 식별자
구분 식별자(인용 식별자로도 불림)는 큰 따옴표(")로 시작해서 끝납니다. 구분 식별자를 사용하는 경우에는 해당하는 객체 참조마다 큰 따옴표를 사용해야 합니다. 이 식별자에는 큰따옴표 외에 인쇄 가능한 표준 UTF-8 문자라면 무엇이든 포함될 수 있습니다. 따라서 그 밖에 공백이나 퍼센트 기호 같이 잘못된 문자까지 포함한 열 또는 테이블 이름도 생성할 수 있습니다.
구분 식별자의 ASCII 문자는 대/소문자를 구분하지 않고 모두 소문자로 변환됩니다. 문자열에 큰따옴표를 사용하려면 다른 큰따옴표를 앞에 입력해야 합니다.
대/소문자 구분 식별자
대/소문자 구분 식별자(대/소문자 혼합 식별자라고도 함)에는 대문자와 소문자가 모두 포함될 수 있습니다. 대/소문자 구분 식별자를 사용하려면 구성 enable_case_sensitive_identifier
를 true
로 설정합니다. 클러스터나 세션에 대해 이 구성을 설정할 수 있습니다. 자세한 내용은 enable_case_sensitive_identifier 및 Amazon Redshift 관리 가이드의 기본 파라미터 값 섹션을 참조하세요.
시스템 열 이름
다음 PostgreSQL 시스템 열 이름은 사용자 정의 열의 열 이름으로 사용할 수 없습니다. 자세한 내용은 https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html
oid
tableoid
xmin
cmin
xmax
cmax
ctid
예시
다음 표에 구분 식별자의 예, 출력 결과 및 설명이 나와 있습니다.
구문 | Result | 토론 |
---|---|---|
"그룹" | 그룹 | GROUP은 예약어이기 때문에 식별자에 사용하기 위해서는 큰따옴표가 필요합니다. |
"""WHERE""" | """WHERE""" | WHERE 역시 예약어입니다. 문자열에 인용 부호를 포함하려면 큰따옴표를 한 번 더 입력하여 큰따옴표를 각각 이스케이프 처리합니다. |
"This name" | this name | 공백을 그대로 유지하기 위해서는 큰따옴표가 필요합니다. |
"This ""IS IT""" | this "is it" | IS IT을 묶는 인용 부호가 이름의 일부가 되기 위해서는 각각 별도의 인용 부호 뒤에 입력되어야 합니다. |
다음은 이 "is it"이라는 열을 포함하여 group이라는 이름의 테이블을 생성하는 예입니다.
create table "group" ( "This ""IS IT""" char(10));
다음은 동일한 결과를 반환하는 쿼리입니다.
select "This ""IS IT""" from "group"; this "is it" -------------- (0 rows)
select "this ""is it""" from "group"; this "is it" -------------- (0 rows)
다음은 동일한 결과를 반환하도록 정규화된 table.column
구문입니다.
select "group"."this ""is it""" from "group"; this "is it" -------------- (0 rows)
다음은 열 이름에 슬래시가 있는 테이블을 생성하는 CREATE TABLE 명령입니다.
create table if not exists city_slash_id( "city/id" integer not null, state char(2) not null);