1、表空間的概念
PostgreSQL中的表空間允許在文件系統中定義用來存放表示數據庫對象的文件的位置。在PostgreSQL中表空間實際上就是給表指定一個存儲目錄。
2、表空間的作用
- 官方解釋:
通過使用表空間,管理員可以控制一個PostgreSQL安裝的磁盤布局。這么做至少有兩個用處。
- 如果初始化集簇所在的分區或者卷用光了空間,而又不能在邏輯上擴展或者做別的什么操作,那么表空間可以被創建在一個不同的分區上,直到系統可以被重新配置。
- 表空間允許管理員根據數據庫對象的使用模式來優化性能。例如,一個很頻繁使用的索引可以被放在非常快並且非常可靠的磁盤上,如一種非常貴的固態設備。同時,一個很少使用的或者對性能要求不高的存儲歸檔數據的表可以存儲在一個便宜但比較慢的磁盤系統上。
- 用一句話來講:能合理利用磁盤性能和空間,制定最優的物理存儲方式來管理數據庫表和索引。
3、表空間的作用
- 在Oracle數據庫中;一個表空間只屬於一個數據庫使用;而一個數據庫可以擁有多個表空間。屬於"一對多"的關系
- 在PostgreSQL集群中;一個表空間可以讓多個數據庫使用;而一個數據庫可以使用多個表空間。屬於"多對多"的關系。
4、系統自帶表空間
- 表空間pg_default是用來存儲系統目錄對象、用戶表、用戶表index、和臨時表、臨時表index、內部臨時表的默認空間。對應存儲目錄$PADATA/base/
- 表空間pg_global用來存放系統字典表;對應存儲目錄$PADATA/global/
5、查看表空間
- psql客戶端 方式
archive=# \db
List of tablespaces
Name | Owner | Location
------------+---------+-------------
data1 | archive | /data/data1
pg_default | sa |
pg_global | sa |
(3 rows)
archive=# select oid,* from pg_tablespace;
oid | spcname | spcowner | spcacl | spcoptions
-------+------------+----------+--------+------------
1663 | pg_default | 10 | |
1664 | pg_global | 10 | |
23976 | data1 | 18997 | |
(3 rows)
6、創建表空間
create tablespace data2 owner archive location '/data/data2';
7、權限分配
表空間的創建本身必須作為一個數據庫超級用戶完成,但在創建完之后之后你可以允許普通數據庫用戶來使用它.要這樣做,給數據庫普通用戶授予表空間上的CREATE權限。表、索引和整個數據庫都可以被分配到特定的表空間.
示例用戶"rax":為普通用戶。
GRANT CREATE ON TABLESPACE data2 TO archive;
8、為數據庫指定默認的表空間
CREATE DATABASE archive_all owner archive;
ALTER DATABASE archive_all SET TABLESPACE data2
注意1:執行該操作;不能連着對應數據庫操作
ERROR: annot change the tablespace of the currently open database
注意2:執行該操作;對應的數據庫不能存在表或者索引已經指定默認的表空間
ERROR: some relations of database "archive_all" are already in tablespace "data2"
9、維表指定默認的表空間
ALTER TABLE name SET TABLESPACE new_tablespace
- 注意:操作是會鎖表