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)