PG_TABLE_DEF
테이블 열에 대한 정보를 저장합니다.
PG_TABLE_DEF는 사용자에게 공개되는 테이블에 대한 정보만 반환합니다. PG_TABLE_DEF가 예상한 결과를 반환하지 않을 때는 search_path 파라미터가 관련 스키마를 포함하여 올바로 설정되어 있는지 확인하십시오.
그 밖에 데이터 분산 스큐, 키 분산 스큐, 테이블 크기, 통계 등 테이블에 대해 더욱 포괄적인 정보를 확인하려면 SVV_TABLE_INFO를 사용하면 됩니다.
테이블 열
열 명칭 | 데이터 유형 | 설명 |
---|---|---|
schemaname | name | 스키마 이름 |
tablename | name | 테이블 이름. |
column | name | 열 이름. |
type | 텍스트 | 열의 데이터 형식입니다. |
인코딩 | character(32) | 열의 인코딩입니다. |
distkey | boolean | 이 열이 테이블의 분산 키일 경우 true입니다. |
sortkey | 정수 | 정렬 키의 열 순서입니다. 테이블이 복합 정렬 키를 사용하는 경우에는 정렬 키에 포함된 모든 열이 양의 값으로 정렬 키에서 자신의 위치를 나타냅니다. 테이블이 인터리브 정렬 키를 사용하는 경우에는 정렬 키에 포함된 각 열이 각각 양의 값이나 음의 값을 갖습니다. 이때는 절대 값이 정렬 키에서 열의 위치를 나타냅니다. 값이 0이면 정렬 키에 포함되지 않는 열입니다. |
notnull | boolean | 열에 NOT NULL 제약 조건이 있으면 true입니다. |
예
다음은 LINEORDER_COMPOUND 테이블에서 복합 정렬 키 열을 나타내는 예입니다.
select "column", type, encoding, distkey, sortkey, "notnull" from pg_table_def where tablename = 'lineorder_compound' and sortkey <> 0; column | type | encoding | distkey | sortkey | notnull -------------+---------+----------+---------+---------+-------- lo_orderkey | integer | delta32k | false | 1 | true lo_custkey | integer | none | false | 2 | true lo_partkey | integer | none | true | 3 | true lo_suppkey | integer | delta32k | false | 4 | true lo_orderdate | integer | delta | false | 5 | true (5 rows)
다음은 LINEORDER_INTERLEAVED 테이블에서 인터리브 정렬 키 열을 나타내는 예입니다.
select "column", type, encoding, distkey, sortkey, "notnull" from pg_table_def where tablename = 'lineorder_interleaved' and sortkey <> 0; column | type | encoding | distkey | sortkey | notnull -------------+---------+----------+---------+---------+-------- lo_orderkey | integer | delta32k | false | -1 | true lo_custkey | integer | none | false | 2 | true lo_partkey | integer | none | true | -3 | true lo_suppkey | integer | delta32k | false | 4 | true lo_orderdate | integer | delta | false | -5 | true (5 rows)
PG_TABLE_DEF는 스키마에서 검색 경로에 포함된 테이블 정보만 반환합니다. 자세한 내용은 search_path 단원을 참조하십시오.
예를 들어 새로운 스키마와 테이블을 생성한 후에 PG_TABLE_DEF에 대한 쿼리를 실행한다고 가정하겠습니다.
create schema demo; create table demo.demotable (one int); select * from pg_table_def where tablename = 'demotable'; schemaname|tablename|column| type | encoding | distkey | sortkey | notnull ----------+---------+------+------+----------+---------+---------+--------
다음 쿼리는 새로운 테이블에 대해서 아무런 행도 반환하지 않습니다. 이때는 search_path
설정을 검사하십시오.
show search_path; search_path --------------- $user, public (1 row)
demo
스키마를 검색 경로에 추가한 후 쿼리를 다시 실행합니다.
set search_path to '$user', 'public', 'demo'; select * from pg_table_def where tablename = 'demotable'; schemaname| tablename |column| type | encoding |distkey|sortkey| notnull ----------+-----------+------+---------+----------+-------+-------+-------- demo | demotable | one | integer | none | f | 0 | f (1 row)