PostgreSQL中的表空間是數據庫中定義的一個文件系統中的位置,一旦定義成功以後,用戶能夠經過指定表空間名字的形式在表空間中建立新對象。
前置條件:
一、文件系統中,該目錄已經存在
lihao=# create tablespace postgres location '/home/lihao/db/pgsql/tbs';
ERROR: directory "/home/lihao/db/pgsql/tbs" does not exist
二、權限
1)、建立權限
僅需保證成功經過pg_ctl命令啓動數據庫的操做系統用戶爲該表空間目錄的屬主便可。與:
a)、調用psql的操做系統用戶所屬的組(含主組、附加組),與該目錄的用戶組無關
b)、調用psql的操做系統用戶,與該目錄的屬主無關
c)、啓動數據庫的操做系統用戶對該目錄是否有讀、寫、執行權限無關;且此時建立成功以後,會自動將該目錄的權限修改成屬主讀、寫、可執行。以下圖:sql
三、引伸:數據庫啓動時的data目錄權限
1)、data目錄必須爲0700權限,且僅能爲0700
2)、知足條件1的前提下,執行pg_ctl命令的操做系統用戶是該目錄的屬主,與用戶組(執行命令的用戶所屬的主組/附加組,目錄所屬的用戶組)無關
四、引伸:pg_ctl命令的使用權限
1)、非root用戶
2)、普通用戶(能夠是root組,含主組、附加組)只要能找到該命令,及命令的擴展lib庫,便可調用數據庫
注意事項:post
數據庫在啓動狀態下,將表空間目錄修改成0000權限,在stop數據庫時會以fast模式進行,這種模式的關閉會形成在線事務回滾,甚至形成用戶數據丟失。spa