【趙渝強老師】PostgreSQL的表空間

赵渝强老师發表於2024-11-29

在PostgreSQL中,資料庫在邏輯上分成多個儲存單元,該單元稱作表空間。表空間用作把邏輯上相關的資料結構放在一起。資料庫邏輯上是由一個或多個表空間組成。在資料庫初始化的時候,會自動建立pg_default和pg_global兩個表空間。其中:

  • pg_global:該表空間用於存放系統表。
  • pg_default:建立表時的預設表空間,該表空間的物理檔案儲存在資料目錄中的base目錄中,如:/home/postgres/training/pgsql/data/base。

影片講解如下:
https://www.bilibili.com/video/BV1EsWAeoEdY/?aid=112980658291...

下面透過具體的操作來演示如何檢視PostgreSQL中已有的表空間和如何建立自己的表空間。
(1)登入PostgreSQL。

bin/psql

(2)檢視PostgreSQL中已有的表空間。

postgres=# \db

# 輸出的資訊如下:
       List of tablespaces
    Name    |  Owner   | Location 
------------+----------+----------
 pg_default | postgres | 
 pg_global  | postgres | 
(2 rows)

(3)建立自己的表空間。

postgres=# create tablespace mydemotbs location
postgres-# '/home/postgres/training/pgsql/data/mydemotbs';

(4)在mydemotbs 表空間上建立表。

postgres=# create table testtable1(tid int primary key,tname text)
postgres-# tablespace mydemotbs;

(5)再次檢視PostgreSQL中已有的表空間。

postgres=# \db

# 輸出的資訊如下:
                         List of tablespaces
    Name    |  Owner   |                   Location                   
------------+----------+--------------------------------------------
 mydemotbs  | postgres | /home/postgres/training/pgsql/data/mydemotbs
 pg_default | postgres | 
 pg_global  | postgres | 
(3 rows)

(6)將該表空間設定為預設的表空間。

postgres=# set default_tablespace = mydemotbs;

(7)查詢表空間資訊

postgres=# select * from pg_tablespace;

# 輸出的資訊如下:
  oid  |  spcname   | spcowner | spcacl | spcoptions 
-------+------------+----------+--------+------------
  1663 | pg_default |       10 |        | 
  1664 | pg_global  |       10 |        | 
 16394 | mydemotbs  |       10 |        | 
(3 rows)

(8)使用\db+命令檢視錶空間的詳細資訊,輸出的資訊如下:

postgres=# \db+

# 輸出的資訊如下:
                         List of tablespaces
    Name    |  Owner   |...| Options |    Size    | Description 
------------+----------+---+---------+------------+-------------
 mydemotbs  | postgres |...|         | 8237 bytes | 
 pg_default | postgres |...|         | 29 MB      | 
 pg_global  | postgres |...|         | 531 kB     | 
(3 rows)

# 注意:命令中的加號表示顯示詳細資訊。

相關文章