PostgreSQL | 스키마(Schema) | 생성된 스키마 목록 조회

PostgreSQL에서 이미 생성된 스키마 목록을 조회하는 방법에 대해 설명한다.

\dn 명령을 사용하여

먼저 psql의 메타 명령을 사용하는 방법에 대해 알아보자. 이미 생성된 스키마 목록을 조회하려면 대상 데이터베이스에 연결하여 다음과 같이 실행한다.

devkuma=# \dn
   스키마(schema) 목록
     이름      |  소유주
---------------+----------
 myschema      | postgres
 orange_schema | orange
 public        | postgres
 testschema    | postgres
(4개 행)


devkuma=#

현재 연결되어 있는 devkuma 데이터베이스에는 기본적으로 생성되는 public 스키마 외에 postgres 역할 소유자의 myschema 스키마와 orange 역할 소유자 orange_schema 스키마가 생성되어 있다.

\dn 명령에 +를 추가하여실행하면 스키마의 기본 정보에 추가된 액세스 권한을 포함하여 조회할 수 있다.

devkuma=# \dn+
                           스키마(schema) 목록
     이름      |  소유주  |     액세스 권한      |          설명
---------------+----------+----------------------+------------------------
 myschema      | postgres |                      |
 orange_schema | orange   |                      |
 public        | postgres | postgres=UC/postgres+| standard public schema
               |          | =UC/postgres         |
 testschema    | postgres |                      |
(4개 행)


devkuma=#

다른 데이터베이스에 연결하여 \dn 명령을 실행하게 되면, 새로 연결된 데이터베이스에서 생성된 스키마 목록을 조회된다. 아래와 같이 postgres 데이터베이스에 연결하여 \dn 명령을 실행해 보자.

devkuma=# \c postgres
접속정보: 데이터베이스="postgres", 사용자="postgres".
postgres=# \dn
스키마(schema) 목록
  이름  |  소유주
--------+----------
 public | postgres
(1개 행)


postgres=#

현재 연결된 ostgres 데이터베이스는 기본적으로 생성되는 public 스키마만 생성되어 있었습니다.

시스템 카탈로그 pg_namespace 조회

이어서 PostgreSQL 시스템 카탈로그의 하나인 pg_namespace에서 얻을 수있는 방법에 대해 알아보자. 시스템 카탈로그는 PostgreSQL의 관리 시스템이 사용하는 테이블에서 데이터베이스 및 테이블 등의 정보를 관리하는 데 사용한다. pg_namespace에는 다음과 같은 열이 있다.

이름 데이터 형식 설명
oid oid 식별자 (명시적으로 지정하지 않으면 얻을 수 없다)
nspname name 네임스페이스의 이름
nspowner oid 이름 공간의 소유자
nspacl aclitem[] 액세스 권한 목록

그러면 대상 데이터베이스에 연결하여 이번에는 pg_namespace에서 다음 컬럼에 대한 데이터를 조회해 보자.

devkuma=# select nspname, nspowner, nspacl from pg_namespace;
      nspname       | nspowner |               nspacl
--------------------+----------+-------------------------------------
 pg_toast           |       10 |
 pg_temp_1          |       10 |
 pg_toast_temp_1    |       10 |
 pg_catalog         |       10 | {postgres=UC/postgres,=U/postgres}
 public             |       10 | {postgres=UC/postgres,=UC/postgres}
 information_schema |       10 | {postgres=UC/postgres,=U/postgres}
 myschema           |       10 |
 orange_schema      |    24635 |
 testschema         |       10 |
(9개 행)


devkuma=#

현재 연결된 데이터베이스에 포함된 스키마 목록을 조회하였다. (pg_으로 시작되는 스키마는 PostgreSQL 시스템에서 사용한다. 또 information_schema도 시스템에서 사용하는 것이다.)

또한 스키마의 소유자를 나타내는 nspowner은 역할에 대한 데이터를 관리하는 시스템 카탈로그 pg_authid의 oid 값이 표시되어 있기 때문에 실제 역할 이름을 얻으려면 pg_authid의 rolname를 참조한다. 예를 들어, 다음과 같이 실행한다.

devkuma=# select nspname, pg_authid.rolname as schemaowner, nspacl
devkuma-#   from pg_namespace
devkuma-#   join pg_authid on pg_authid.oid = pg_namespace.nspowner;
      nspname       | schemaowner |               nspacl
--------------------+-------------+-------------------------------------
 pg_toast           | postgres    |
 pg_temp_1          | postgres    |
 pg_toast_temp_1    | postgres    |
 pg_catalog         | postgres    | {postgres=UC/postgres,=U/postgres}
 public             | postgres    | {postgres=UC/postgres,=UC/postgres}
 information_schema | postgres    | {postgres=UC/postgres,=U/postgres}
 myschema           | postgres    |
 orange_schema      | orange      |
 testschema         | postgres    |
(9개 행)


devkuma=#

스키마의 소유자 역할 이름을 포함하여 스키마의 목록을 조회가 되었다.

여기까지 생성된 스키마 목록을 검색하는 방법에 대해 설명하였다.