HOWTO · PostgreSQL
PostgreSQL 명명 규칙
PostgreSQL 데이터베이스, 테이블, 시퀀스, 키, 제약 조건, 인덱스의 이름을 일관된 방식으로 지정하는 방법과 따옴표로 묶은 식별자가 어떻게 동작하는지 알아보세요.
이 페이지의 내용
프로젝트에 맞는 읽기 쉬운 명명 규칙 하나를 정해 데이터베이스, 테이블, 시퀀스, 기본 키, 제약 조건, 인덱스에 일관되게 적용하세요. PostgreSQL은 모든 상황에 적용되는 단일 규칙을 요구하지 않습니다. 일관성을 유지하면 개발자가 객체를 찾고 관리하기 쉬워집니다.
PostgreSQL 명명 규칙
PostgreSQL의 식별자 규칙은 명명 스타일 선택과 별개입니다. SQL 키워드를 대문자로 쓰는 것은 서식 관례입니다. 식별자에는 소문자 단어를 밑줄로 연결하는 방식을 기본으로 삼으면 실용적입니다. 예를 들어 customer_order나 created_at처럼 쓸 수 있습니다. 테이블, 열, 시퀀스, 제약 조건, 인덱스에는 의미가 분명한 이름을 사용하고 같은 패턴을 일관되게 적용하세요. customer_order_pkey, customer_order_status_check, customer_order_created_at_idx 같은 이름은 객체의 역할을 쉽게 알아보게 해 줍니다.
따옴표가 없는 식별자는 소문자로 변환되므로 Employee, EMPLOYEE, employee는 같은 이름을 가리킵니다. 따옴표로 묶은 식별자는 대소문자를 보존합니다. 따라서 "Employee"는 다른 이름이며, 참조할 때마다 같은 대문자 표기와 큰따옴표를 사용해야 합니다. 쿼리와 도구를 단순하게 유지하려면 소문자로 된 따옴표 없는 이름을 우선 사용하세요. 예약어를 이름으로 쓰지 않는 편이 좋습니다. 단어를 따옴표로 묶으면 사용할 수 있는 경우도 있지만, 매번 따옴표를 써야 하고 SQL을 유지 관리하기 어려워질 수 있습니다.
각 객체의 역할에 맞게 명명 패턴을 적용하세요. 테이블 이름은 스키마 전체에서 일관된 방식으로 단수 또는 복수 명사를 선택하고, 열 이름은 저장하는 값을 설명하도록 정할 수 있습니다. 시퀀스 이름에는 해당 시퀀스가 값을 제공하는 테이블과 키를 드러낼 수 있습니다. 제약 조건과 인덱스에는 테이블이나 열 이름에 _pkey, _key, _check, _idx 같은 접미사를 붙이세요. 이러한 접미사는 관례일 뿐 PostgreSQL의 요구 사항은 아닙니다. 이름을 지정하지 않은 제약 조건과 인덱스는 PostgreSQL이 이름을 생성할 수 있지만, 이름을 명시하면 마이그레이션, 오류 메시지, 유지 관리용 쿼리를 읽기 쉬워집니다. 이름은 적당히 간결하게 짓고 PostgreSQL 식별자 길이 제한을 지키세요. 길이가 제한을 넘으면 이름이 잘려 서로 비슷한 이름이 충돌할 수 있습니다.
다음 절차는 사용자 역할에 데이터베이스 생성 권한이 있는 데이터베이스에 연결한 대화형 psql 세션을 위한 것입니다. 먼저 데이터베이스 생성 명령을 실행한 뒤 psql 메타 명령으로 해당 데이터베이스에 연결하세요. 이어지는 SQL 문은 시퀀스, 테이블, 기본 키와 고유 제약 조건, 보조 인덱스를 만듭니다. 마지막 psql 명령은 데이터베이스, 시퀀스, 테이블 정의를 확인합니다. 이 절차를 실행하려면 PostgreSQL이 필요하며, 아래 명령은 실제 서버 세션에서 기록한 출력이 아닙니다.
- 별도의 데모 데이터베이스를
CREATE DATABASE naming_demo;로 만듭니다. \connect naming_demo로 해당 데이터베이스에 연결합니다.- 키 시퀀스를
CREATE SEQUENCE employee_id_seq;로 만듭니다. CREATE TABLE employee (employee_id integer DEFAULT nextval('employee_id_seq'::regclass), first_name text NOT NULL, last_name text NOT NULL, email_address text NOT NULL, CONSTRAINT employee_pkey PRIMARY KEY (employee_id), CONSTRAINT employee_email_address_key UNIQUE (email_address));로 테이블을 만듭니다.ALTER SEQUENCE employee_id_seq OWNED BY employee.employee_id;를 실행해 시퀀스를 키 열에 연결합니다.CREATE INDEX employee_last_name_idx ON employee (last_name);로 이름이 지정된 인덱스를 추가합니다.\l naming_demo로 데이터베이스를,\ds employee_id_seq로 시퀀스를,\d employee로 테이블을 확인합니다. 테이블 설명에는 열, 제약 조건, 인덱스와 함께employee_pkey,employee_email_address_key,employee_last_name_idx가 표시됩니다.
기존 스키마에서 대소문자를 섞거나 문장 부호를 사용해야 한다면 따옴표로 묶은 이름이 유용할 수 있습니다. 다만 이후 모든 참조에서 표기를 정확히 유지하고 큰따옴표를 써야 합니다. 키워드와 같은 따옴표로 묶은 이름도 PostgreSQL이 허용하는 위치에서는 사용할 수 있지만, 독자가 SQL 문법으로 착각하기 쉽습니다. 이런 혼란을 피하려면 user_account 같은 대체 이름을 사용하세요. 소문자 따옴표 없는 이름은 PostgreSQL의 소문자 변환 동작과 자연스럽게 맞으며 쿼리, 스크립트, 데이터베이스 도구에서 대체로 다루기 쉽습니다.
이 Python 예제는 몇 가지 이름을 서식에 맞춰 출력합니다. 명명 관례를 보여 주는 예제이며 PostgreSQL에 연결하지는 않습니다. 예제를 실행해 보세요.
objects = ["customer order", "created at", "customer order pkey"]
names = [name.replace(" ", "_") for name in objects]
print("\n".join(names))
customer_order
created_at
customer_order_pkey