PostgreSQL | 데이터베이스(Database) | 생성된 데이터베이스 목록 조회

PostgreSQL로 생성된 데이터베이스 목록을 조회하는 방법에 대해 설명한다.

\l 명령을 사용하기

먼저 psql의 메타 명령을 사용하는 방법이다. 생성된 데이터베이스 목록을 검색하려면 다음과 같이 수행한다.

postgres=# \l
                                      데이터베이스 목록
   이름    |  소유주  | 인코딩 |     Collate      |      Ctype       |      액세스 권한
-----------+----------+--------+------------------+------------------+-----------------------
 devkuma   | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 devkuma2  | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 postgres  | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 sample    | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 template0 | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |        |                  |                  | postgres=CTc/postgres
 template1 | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |        |                  |                  | postgres=CTc/postgres
(6개 행)


postgres=#

생성된 데이터베이스 목록을 조회할 수 있다.

시스템 카탈로그 pg_database에서 조회하기

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

이름 설명
oid oid 식별자 (명시적으로 지정하지 않으면 얻을 수 없다)
datname name 데이터베이스 이름
datdba oid 데이터베이스 소유자
encoding int4 데이터베이스 문자 집합의 식별 번호
datcollate name 데이터베이스 문자열 정렬 순서
datctype name 데이터베이스 문자 유형
datistemplate bool 모든 사용자가 복제할 수 있는지 여부 (false의 경우는 수퍼 유저 또는 데이터베이스 소유자 만이 복제 가능)
datallowconn bool 데이터베이스에 연결할 수 있는지 여부 (template0의 데이터 변경을 방지하기 위해 사용)
datconnlimit int4 동시 연결의 최대 수 (-1은 무제한)
datlastsysoid oid 데이터베이스 최종 시스템 OID
datfrozenxid xid 이 데이터베이스에서 이 값보다 이전 트랜잭션 ID는 영속적인(동결 된) 트랜잭션 ID를 갖도록 변경되어 있다. 이는 이 데이터베이스에 대해 트랜잭션 ID 순환(wraparound) 문제를 방지하고, pg_xact을 축소시키는 것을 목적으로 한진공 작업을 수행할 것인지 여부를 추적하기 위해 사용된다.
datminmxid xid 이 데이터베이스 내에 트랜잭션 ID로 대체되기 전에 모든 멀티 트랜잭션 ID이다. 이는 트랜잭션 ID 순환(wraparound) 문제를 방지하거나 pg_multixact을 축소시키기 위해 데이터베이스를 진공해야하는지 여부를 추적하는 데 사용된다.
dattablespace oid 데이터베이스의 기본 테이블 공간
datacl aclitem [] 액세스 권한 목록

이번에는 pg_database에서 다음 컬럼에 대한 데이터를 조회해보자.

postgres=# select datname, datdba, encoding, datcollate, datctype from pg_database;
  datname  | datdba | encoding |    datcollate    |     datctype
-----------+--------+----------+------------------+------------------
 postgres  |     10 |        6 | Korean_Korea.949 | Korean_Korea.949
 template1 |     10 |        6 | Korean_Korea.949 | Korean_Korea.949
 template0 |     10 |        6 | Korean_Korea.949 | Korean_Korea.949
 sample    |     10 |        6 | Korean_Korea.949 | Korean_Korea.949
 devkuma   |     10 |        6 | Korean_Korea.949 | Korean_Korea.949
 devkuma2  |     10 |        6 | Korean_Korea.949 | Korean_Korea.949
(6개 행)


postgres=#

생성 된 데이터베이스 목록이 조회해 된 것을 볼수 있다.

여기서 데이터베이스의 소유자를 나타내는 datdba은 역할에 대한 데이터를 관리하는 시스템 카탈로그 pg_authid의 oid 값이 표시되어 있기 때문에 실제 역할 이름을 얻으려면 pg_authid의 rolname를 참조해야 한다. 그리고 문자 셋을 나타내는 encoding은 pg_encoding_to_char 함수를 사용하면 실제 문자 셋 이름을 얻을 수 있다.

예를 들어, 다음과 같이 실행한다.

postgres=# select datname,
postgres-#     pg_authid.rolname as dbrollname,
postgres-#     pg_encoding_to_char(encoding) as dbencoding,
postgres-#     datcollate,
postgres-#     datctype
postgres-#   from pg_database
postgres-#   join pg_authid on pg_authid.oid = pg_database.datdba;
  datname  | dbrollname | dbencoding |    datcollate    |     datctype
-----------+------------+------------+------------------+------------------
 devkuma2  | postgres   | UTF8       | Korean_Korea.949 | Korean_Korea.949
 devkuma   | postgres   | UTF8       | Korean_Korea.949 | Korean_Korea.949
 sample    | postgres   | UTF8       | Korean_Korea.949 | Korean_Korea.949
 template0 | postgres   | UTF8       | Korean_Korea.949 | Korean_Korea.949
 template1 | postgres   | UTF8       | Korean_Korea.949 | Korean_Korea.949
 postgres  | postgres   | UTF8       | Korean_Korea.949 | Korean_Korea.949
(6개 행)


postgres=#

데이터베이스 소유자 또는 문자 셋을 사용하여 데이터베이스의 목록을 죄회 할 수 있다.

생성 된 데이터베이스 목록을 가져 오는 방법에 대해 설명했습니다.

참고