정보 스키마

정보 스키마 (Information Schema)

information_schema 안의 뷰(view)는 데이터베이스의 카탈로그(catalog) 항목을 설명하는 SQL 표준 뷰예요. 이 뷰를 필터링해서 특정 컬럼이나 테이블에 대한 정보를 얻을 수 있어요. DuckDB의 구현은 PostgreSQL의 information schema를 기반으로 해요.

출처: 문서

본문

테이블 (Tables)

character_sets: 문자 집합 (Character Sets)

Column Description Type Example
character_set_catalog 현재 구현되지 않음 – 항상 NULL. VARCHAR NULL
character_set_schema 현재 구현되지 않음 – 항상 NULL. VARCHAR NULL
character_set_name 문자 집합의 이름 (현재는 데이터베이스 인코딩의 이름을 표시). VARCHAR 'UTF8'
character_repertoire 문자 레퍼토리. 인코딩이 UTF8이면 UCS를, 아니면 인코딩 이름을 표시. VARCHAR 'UCS'
form_of_use 문자 인코딩 형식 (데이터베이스 인코딩과 동일). VARCHAR 'UTF8'
default_collate_catalog 기본 정렬이 있는 데이터베이스 이름 (항상 현재 데이터베이스). VARCHAR 'my_db'
default_collate_schema 기본 정렬이 있는 스키마 이름. VARCHAR 'pg_catalog'
default_collate_name 기본 정렬의 이름. VARCHAR 'ucs_basic'

columns: 컬럼 (Columns)

컬럼에 대한 카탈로그 정보를 설명하는 뷰는 information_schema.columns예요. 데이터베이스에 존재하는 컬럼을 나열하며 다음과 같은 구조를 가져요.

Column Description Type Example
table_catalog 테이블이 들어 있는 데이터베이스 이름 (항상 현재 데이터베이스). VARCHAR 'my_db'
table_schema 테이블이 들어 있는 스키마 이름. VARCHAR 'main'
table_name 테이블 이름. VARCHAR 'widgets'
column_name 컬럼 이름. VARCHAR 'price'
ordinal_position 테이블 내 컬럼의 순서 위치 (1부터 시작). INTEGER 5
column_default 컬럼의 기본 표현식. VARCHAR 1.99
is_nullable 컬럼이 nullable일 가능성이 있으면 YES, 아닐 수 있음이 알려져 있으면 NO. VARCHAR 'YES'
data_type 컬럼의 데이터 타입. VARCHAR 'DECIMAL(18, 2)'
character_maximum_length data_type이 문자나 비트 문자열 타입이면 선언된 최대 길이; 다른 모든 타입이거나 최대 길이가 선언되지 않았으면 NULL. INTEGER 255
character_octet_length data_type이 문자 타입이면 데이터의 최대 옥텟(바이트) 길이; 다른 모든 타입이면 NULL. 최대 옥텟 길이는 선언된 문자 최대 길이와 문자 인코딩에 따라 달라짐. INTEGER 1073741824
numeric_precision data_type이 숫자 타입이면 (선언되거나 암시된) 정밀도. 정밀도는 유효숫자 개수를 나타냄. 다른 모든 타입이면 NULL. INTEGER 18
numeric_scale data_type이 숫자 타입이면 (선언되거나 암시된) 스케일. 스케일은 소수점 이하 자릿수를 나타냄. 다른 모든 타입이면 NULL. INTEGER 2
datetime_precision data_type이 date, time, timestamp, interval 타입이면 (선언되거나 암시된) 소수 초 정밀도. DuckDB는 현재 소수 초를 지원하지 않음. 다른 모든 타입이면 NULL. INTEGER 0

constraint_column_usage: 제약 컬럼 사용 (Constraint Column Usage)

이 뷰는 현재 데이터베이스에서 어떤 제약에 사용되는 모든 컬럼을 설명해요. check 제약에 대해서는 check 표현식에 사용된 컬럼을, not-null 제약에 대해서는 제약이 정의된 컬럼을, 외래 키 제약에 대해서는 외래 키가 참조하는 컬럼을, unique 또는 primary key 제약에 대해서는 제약이 적용된 컬럼을 식별해요.

Column Description Type Example
table_catalog 어떤 제약에 사용되는 컬럼을 포함한 테이블을 포함한 데이터베이스 이름 (항상 현재 데이터베이스) VARCHAR 'my_db'
table_schema 어떤 제약에 사용되는 컬럼을 포함한 테이블을 포함한 스키마 이름 VARCHAR 'main'
table_name 어떤 제약에 사용되는 컬럼을 포함한 테이블 이름 VARCHAR 'widgets'
column_name 어떤 제약에 사용되는 컬럼 이름 VARCHAR 'price'
constraint_catalog 제약을 포함한 데이터베이스 이름 (항상 현재 데이터베이스) VARCHAR 'my_db'
constraint_schema 제약을 포함한 스키마 이름 VARCHAR 'main'
constraint_name 제약 이름 VARCHAR 'exam_id_students_id_fkey'

key_column_usage: 키 컬럼 사용 (Key Column Usage)

Column Description Type Example
constraint_catalog 제약을 포함한 데이터베이스 이름 (항상 현재 데이터베이스). VARCHAR 'my_db'
constraint_schema 제약을 포함한 스키마 이름. VARCHAR 'main'
constraint_name 제약 이름. VARCHAR 'exams_exam_id_fkey'
table_catalog 이 제약으로 제한되는 컬럼을 포함한 테이블을 포함한 데이터베이스 이름 (항상 현재 데이터베이스). VARCHAR 'my_db'
table_schema 이 제약으로 제한되는 컬럼을 포함한 테이블을 포함한 스키마 이름. VARCHAR 'main'
table_name 이 제약으로 제한되는 컬럼을 포함한 테이블 이름. VARCHAR 'exams'
column_name 이 제약으로 제한되는 컬럼 이름. VARCHAR 'exam_id'
ordinal_position 제약 키 내 컬럼의 순서 위치 (1부터 시작). INTEGER 1
position_in_unique_constraint 외래 키 제약의 경우, 자신의 unique 제약 내에서 참조된 컬럼의 순서 위치 (1부터 시작); 그 외에는 NULL. INTEGER 1

referential_constraints: 참조 제약 (Referential Constraints)

Column Description Type Example
constraint_catalog 제약을 포함한 데이터베이스 이름 (항상 현재 데이터베이스). VARCHAR 'my_db'
constraint_schema 제약을 포함한 스키마 이름. VARCHAR main
constraint_name 제약 이름. VARCHAR exam_id_students_id_fkey
unique_constraint_catalog 외래 키 제약이 참조하는 unique 또는 primary key 제약을 포함한 데이터베이스 이름. VARCHAR 'my_db'
unique_constraint_schema 외래 키 제약이 참조하는 unique 또는 primary key 제약을 포함한 스키마 이름. VARCHAR 'main'
unique_constraint_name 외래 키 제약이 참조하는 unique 또는 primary key 제약 이름. VARCHAR 'students_id_pkey'
match_option 외래 키 제약의 매치 옵션. 항상 NONE. VARCHAR NONE
update_rule 외래 키 제약의 업데이트 규칙. 항상 NO ACTION. VARCHAR NO ACTION
delete_rule 외래 키 제약의 삭제 규칙. 항상 NO ACTION. VARCHAR NO ACTION

schemata: 데이터베이스, 카탈로그, 스키마 (Database, Catalog and Schema)

최상위 카탈로그 뷰는 information_schema.schemata예요. 데이터베이스에 존재하는 카탈로그와 스키마를 나열하며 다음과 같은 구조를 가져요.

Column Description Type Example
catalog_name 스키마가 포함된 데이터베이스 이름. VARCHAR 'my_db'
schema_name 스키마 이름. VARCHAR 'main'
schema_owner 스키마 소유자 이름. 아직 구현되지 않음. VARCHAR 'duckdb'
default_character_set_catalog DuckDB에서 사용할 수 없는 기능에 해당. VARCHAR NULL
default_character_set_schema DuckDB에서 사용할 수 없는 기능에 해당. VARCHAR NULL
default_character_set_name DuckDB에서 사용할 수 없는 기능에 해당. VARCHAR NULL
sql_path DuckDB에서 사용할 수 없는 기능에 해당. VARCHAR NULL

tables: 테이블과 뷰 (Tables and Views)

테이블과 뷰에 대한 카탈로그 정보를 설명하는 뷰는 information_schema.tables예요. 데이터베이스에 존재하는 테이블을 나열하며 다음과 같은 구조를 가져요.

Column Description Type Example
table_catalog 테이블이나 뷰가 속한 카탈로그. VARCHAR 'my_db'
table_schema 테이블이나 뷰가 속한 스키마. VARCHAR 'main'
table_name 테이블이나 뷰의 이름. VARCHAR 'widgets'
table_type 테이블 타입. BASE TABLE, LOCAL TEMPORARY, VIEW 중 하나. VARCHAR 'BASE TABLE'
self_referencing_column_name DuckDB에서 사용할 수 없는 기능에 해당. VARCHAR NULL
reference_generation DuckDB에서 사용할 수 없는 기능에 해당. VARCHAR NULL
user_defined_type_catalog typed table이면 기저 데이터 타입을 포함한 데이터베이스 이름 (항상 현재 데이터베이스), 아니면 NULL. 현재 미구현. VARCHAR NULL
user_defined_type_schema typed table이면 기저 데이터 타입을 포함한 스키마 이름, 아니면 NULL. 현재 미구현. VARCHAR NULL
user_defined_type_name typed table이면 기저 데이터 타입 이름, 아니면 NULL. 현재 미구현. VARCHAR NULL
is_insertable_into 테이블에 삽입 가능하면 YES, 아니면 NO. (기본 테이블은 항상 삽입 가능하고 뷰는 그렇지 않을 수 있음) VARCHAR 'YES'
is_typed typed table이면 YES, 아니면 NO. VARCHAR 'NO'
commit_action 아직 구현되지 않음. VARCHAR 'NO'

table_constraints: 테이블 제약 (Table Constraints)

Column Description Type Example
constraint_catalog 제약을 포함한 데이터베이스 이름 (항상 현재 데이터베이스). VARCHAR 'my_db'
constraint_schema 제약을 포함한 스키마 이름. VARCHAR 'main'
constraint_name 제약 이름. VARCHAR 'exams_exam_id_fkey'
table_catalog 테이블을 포함한 데이터베이스 이름 (항상 현재 데이터베이스). VARCHAR 'my_db'
table_schema 테이블을 포함한 스키마 이름. VARCHAR 'main'
table_name 테이블 이름. VARCHAR 'exams'
constraint_type 제약 타입: CHECK, FOREIGN KEY, PRIMARY KEY, UNIQUE 중 하나. VARCHAR 'FOREIGN KEY'
is_deferrable 제약이 deferrable이면 YES, 아니면 NO. VARCHAR 'NO'
initially_deferred 제약이 deferrable이고 처음에 deferred면 YES, 아니면 NO. VARCHAR 'NO'
enforced 항상 YES. VARCHAR 'YES'
nulls_distinct unique 제약이라면 NULL을 distinct로 취급하면 YES, 그렇지 않으면 NO; 다른 타입의 제약이면 NULL. VARCHAR 'YES'

카탈로그 함수 (Catalog Functions)

데이터베이스에 설정된 카탈로그와 스키마에 대한 자세한 내용을 보기 위한 함수도 몇 가지 제공돼요.

Function Description Example Result
current_catalog() 현재 활성 카탈로그의 이름을 반환. 기본값은 memory. current_catalog() 'memory'
current_schema() 현재 활성 스키마의 이름을 반환. 기본값은 main. current_schema() 'main'
current_schemas(boolean) 스키마 목록을 반환. true를 넘기면 암시적 스키마를 포함. current_schemas(true) ['temp', 'main', 'pg_catalog']

더 알아보기 (Learn more)