PostgreSQL

PostgreSQL 表領域一覧(テーブル空間一覧)

表領域にはオーナが存在します。オーナー(ユーザ)がクラスタ全体で共通であるように表領域についてもクラスタ全体で共通です。(クラスタ内DB何れからも利用できます)またクラスタ内データベースはそれぞれデフォルト表領域を一つ持ち、対象データベースにて各オブジェクトの作成時に表領域を省略するとデフォルト表領域に作成されます。

表領域一覧出力SQL

pg_catalog.pg_tablespaceシステムカタログにて確認ができます。pg_tablespace_location()にoidを渡すことで対象フォルダを取得できます。

select t.spcname as tablespace_name
,pg_catalog.pg_get_userbyid(t.spcowner) as owner
,pg_catalog.pg_tablespace_location(t.oid) as location
,pg_catalog.pg_size_pretty(pg_catalog.pg_tablespace_size(oid)) AS Size
from pg_catalog.pg_tablespace t
order by t.oid;
表領域一覧出力例
 tablespace_name |  owner   |          location           |   size
-----------------+----------+-----------------------------+----------
 pg_default      | postgres |                             | 32 MB
 pg_global       | postgres |                             | 575 kB
 tbspc_01        | sooni    | /var/lib/pgsql/pgdata/spc01 | 8317 kB
 tbspc_02        | udonman  | /var/lib/pgsql/pgdata/spc02 | 19 bytes
(4 rows)


postgres=# show data_directory;
     data_directory
------------------------
 /var/lib/pgsql/13/data
(1 row)


postgres=#
pg_defaultとpg_globalテーブル空間(表領域)は初期化タイミングで作成されています

データベースクラスタが初期化されるタイミングでpg_defaultとpg_globalテーブル空間(表領域)が作成されます。pg_globalはシステムカタログ用、pg_defaultは初期化タイミングで作成されるデータベース(postgres、template0、template1)用になっています。(テンプレートデータベースのデフォルト表領域がpg_defaultになっているので、新規にデータベースを作成する際表領域の割り当てを指定しない限りpg_defaultが採用されます。以下はデータベースを作成する際表領域(tbspc_02)を割り当てる例です。
create database soodb tablespace = tbspc_02;

デフォルト表領域を指定してデータベースを作成する例
-- データベース作成前
  datname  |  owner   | pg_encoding_to_char |  spcname   |          Location           |   Access privileges
-----------+----------+---------------------+------------+-----------------------------+-----------------------
 template1 | postgres | UTF8                | pg_default |                             | =c/postgres          +
           |          |                     |            |                             | postgres=CTc/postgres
 template0 | postgres | UTF8                | pg_default |                             | =c/postgres          +
           |          |                     |            |                             | postgres=CTc/postgres
 postgres  | postgres | UTF8                | pg_default |                             |
 myposdb   | sooni    | UTF8                | pg_default |                             | =Tc/sooni            +
           |          |                     |            |                             | sooni=CTc/sooni
 prdb      | sooni    | UTF8                | tbspc_01   | /var/lib/pgsql/pgdata/spc01 |
(5 rows)

-- 表領域を指定しデータベース作成
postgres=# create database soodb tablespace = tbspc_02;
CREATE DATABASE
-- 再度確認
postgres=# select d.datname,u.usename as owner,pg_encoding_to_char(d.encoding),s.spcname
postgres-# ,pg_tablespace_location(d.dattablespace) as "Location"
postgres-# ,pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
postgres-# from pg_database d inner join pg_user u on d.datdba = u.usesysid
postgres-# left outer join pg_tablespace s on d.dattablespace = s.oid
postgres-# order by d.oid;
  datname  |  owner   | pg_encoding_to_char |  spcname   |          Location           |   Access privileges
-----------+----------+---------------------+------------+-----------------------------+-----------------------
 template1 | postgres | UTF8                | pg_default |                             | =c/postgres          +
           |          |                     |            |                             | postgres=CTc/postgres
 template0 | postgres | UTF8                | pg_default |                             | =c/postgres          +
           |          |                     |            |                             | postgres=CTc/postgres
 postgres  | postgres | UTF8                | pg_default |                             |
 myposdb   | sooni    | UTF8                | pg_default |                             | =Tc/sooni            +
           |          |                     |            |                             | sooni=CTc/sooni
 prdb      | sooni    | UTF8                | tbspc_01   | /var/lib/pgsql/pgdata/spc01 |
 soodb     | postgres | UTF8                | tbspc_02   | /var/lib/pgsql/pgdata/spc02 |
(6 rows)


postgres=#
psqlメタコマンドでの一覧
\db[+]
表領域一覧出力例
postgres=# \db[+]
                                            List of tablespaces
    Name    |  Owner   |          Location           | Access privileges | Options |   Size   | Description
------------+----------+-----------------------------+-------------------+---------+----------+-------------
 pg_default | postgres |                             |                   |         | 32 MB    |
 pg_global  | postgres |                             |                   |         | 575 kB   |
 tbspc_01   | sooni    | /var/lib/pgsql/pgdata/spc01 |                   |         | 8317 kB  |
 tbspc_02   | udonman  | /var/lib/pgsql/pgdata/spc02 |                   |         | 19 bytes |

各種オブジェクト一覧

スポンサーリンク
タイトルとURLをコピーしました