標籤:
一、介紹
資料表空間的作用就是允許資料庫管理員定義一個其他非資料目錄的位置儲存資料庫物件。
使用情境之一是,如果機器新加了ssd,但是又不夠整個執行個體使用,可以將一些重要和使用頻率高的表和索引放到ssd上,提高查詢效率
二、建立資料表空間
先建立要儲存資料表空間的目錄
# mkdir -p /export/tablespace1# chown -R postgres: /export/tablespace1/
進入資料庫
postgres=# \db List of tablespaces Name | Owner | Location ------------+----------+---------- pg_default | postgres | pg_global | postgres | (2 rows)
資料裡面只有兩個預設的資料表空間,還沒有其他的資料表空間,現在建立一個資料表空間
postgres=# CREATE TABLESPACE tbspl1 LOCATION ‘/export/tablespace1‘;CREATE TABLESPACEpostgres=# \db List of tablespaces Name | Owner | Location ------------+----------+--------------------- pg_default | postgres | pg_global | postgres | tbspl1 | postgres | /export/tablespace1(3 rows)
三、使用資料表空間
建立一個表table_a並查看其位置
postgres=# create table table_a (id int);CREATE TABLEpostgres=# select pg_relation_filepath(‘table_a‘); pg_relation_filepath ---------------------- base/13003/17031(1 row)
可以看出是在資料目錄的base目錄下,將其修改到資料表空間tbspl1
postgres=# alter table table_a set tablespace tbspl1 ;ALTER TABLEpostgres=# select pg_relation_filepath(‘table_a‘); pg_relation_filepath ---------------------------------------------- pg_tblspc/17030/PG_9.4_201409291/13003/17037(1 row)
可見錶轉移到了資料表空間所在的目錄了
建立使用資料表空間的表:
postgres=# create table table_b (id int) tablespace tbspl1; CREATE TABLEpostgres=# select pg_relation_filepath(‘table_b‘); pg_relation_filepath ---------------------------------------------- pg_tblspc/17030/PG_9.4_201409291/13003/17038(1 row)
對於預設建立的索引是還是在資料目錄下的,跟表沒有關係
postgres=# create index on table_b (id);CREATE INDEXpostgres=# \d table_b Table "public.table_b" Column | Type | Modifiers --------+---------+----------- id | integer | Indexes: "table_b_id_idx" btree (id)Tablespace: "tbspl1"postgres=# select pg_relation_filepath(‘table_b_id_idx‘); pg_relation_filepath ---------------------- base/13003/17041(1 row)
建立使用資料表空間的索引
postgres=# create index on table_a (id) tablespace tbspl1; CREATE INDEXpostgres=# \d table_a Table "public.table_a" Column | Type | Modifiers --------+---------+----------- id | integer | Indexes: "table_a_id_idx" btree (id), tablespace "tbspl1"Tablespace: "tbspl1"postgres=# select pg_relation_filepath(‘table_a_id_idx‘); pg_relation_filepath ---------------------------------------------- pg_tblspc/17030/PG_9.4_201409291/13003/17042(1 row)
PostgreSQL資料表空間的使用