PostgreSQL pg_catalog

업데이트:

시스템 카탈로그란 RDMBS에 대한 metadata들을 저장하는 장소이다.

information_schema에도 메타데이터 정보가 저장되어 있는데, pg_catalog 시스템 카탈로그 정보를 조인해서 얻은 view이다.

CREATE database 와 같은 쿼리를 수행하면 pg_catalog에 자동으로 insert된다. 시스템 카탈로그를 직접 조작하는 것은 위험하다.

pg_catalog는 각 DB 내부에 존재하는 schema 다.

데이터베이스 구조 : Database -> Schema -> Table (Objects..)

스키마와 테이블 이름 조회하기

SELECT schemaname, tablename 
FROM pg_catalog.pg_tables 
WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema';

특정 테이블의 컬럼 정보 조회하기

SELECT attname, format_type(atttypid, atttypmod)
FROM pg_catalog.pg_attribute
WHERE attrelid = '<table>'::regclass
	AND attnum > 0
	AND NOT attisdropped;
  • pg_attribute 테이블 명세
Name Type References Description
attrelid oid pg_class.oid The table this column belongs to
attname name   The column name
atttypid oid pg_type.oid The data type of this column
atttypmod int4   atttypmod records type-specific data supplied at table creation time (for example, the maximum length of a varchar column). It is passed to type-specific input functions and length coercion functions. The value will generally be -1 for types that do not need atttypmod.
attnum int2   The number of the column. Ordinary columns are numbered from 1 up. System columns, such as oid, have (arbitrary) negative numbers.
attisdropped bool   This column has been dropped and is no longer valid. A dropped column is still physically present in the table, but is ignored by the parser and so cannot be accessed via SQL.
  • format_type() 시스템 함수
Name Return Type Description
format_type(type_oid, typemod) text get SQL name of a data type
Name References Description Value Example
regclass pg_class relation name pg_type

댓글남기기