이름 및 식별자 - Amazon Redshift

이름 및 식별자

이름은 사용자와 암호 외에도 테이블이나 열 같은 데이터베이스 객체를 식별하는 역할을 합니다. 이름식별자는 서로 통용되는 용어입니다. 식별자는 표준 식별자와 인용 또는 구분 식별자, 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_identifiertrue로 설정합니다. 클러스터나 세션에 대해 이 구성을 설정할 수 있습니다. 자세한 내용은 enable_case_sensitive_identifierAmazon 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);