PostgreSQL10.1手冊_部分III.伺服器管理_第22章管理資料庫_22.6.表空間
22.6. 表空間
PostgreSQL中的表空間允許資料庫管理員在檔案系統中定義用來存放表示資料庫物件的檔案的位置。一旦被建立,表空間就可以在建立資料庫物件時通過名稱引用。
通過使用表空間,管理員可以控制一個PostgreSQL安裝的磁碟佈局。 這麼做至少有兩個用處。首先,如果初始化集簇所在的分割槽或者卷用光了空間,而又不能在邏輯上擴充套件或者做別的什麼操作,那麼表空間可以被建立在一個不同的分割槽上,直到系統可以被重新配置。
其次,表空間允許管理員根據資料庫物件的使用模式來優化效能。例如,一個很頻繁使用的索引可以被放在非常快並且非常可靠的磁碟上,如一種非常貴的固態裝置。同時,一個很少使用的或者對效能要求不高的儲存歸檔資料的表可以儲存在一個便宜但比較慢的磁碟系統上。
警告
即便是位於主要的 PostgreSQL 資料目錄之外,表空間也是資料庫集簇的一部分 並且不能被視作資料檔案的一個自治集合。 它們依賴於包含在主資料目錄中的後設資料,並且因此不能被附加到一個 不同的資料庫集簇或者單獨備份。類似地,如果丟失一個表空間(檔案刪除、磁碟失效等), 資料庫集簇可能會變成不可讀或者無法啟動。把一個表空間放在一個臨時檔案系統 (如一個記憶體虛擬盤)上會帶來整個集簇的可靠性風險。
要定義一個表空間,使用CREATE TABLESPACE命令,例如:
CREATE TABLESPACE fastspace LOCATION `/ssd1/postgresql/data`;
這個位置必須是一個已有的空目錄,並且屬於PostgreSQL作業系統使用者。 所有後續在該表空間中建立的物件都將被存放在這個目錄下的檔案中。該位置不能放在可移動 或者瞬時儲存上,因為如果表空間丟失會導致集簇無法工作。
注意
通常在每個邏輯檔案系統上建立多於一個表空間沒有什麼意義,因為你無法控制在一個邏輯檔案系統中特定檔案的位置。不過,PostgreSQL不強制任何這樣的限制,並且事實上它不會注意你的系統上的檔案系統邊界。它只是在你告訴它要使用的目錄中儲存檔案。
表空間的建立本身必須作為一個資料庫超級使用者完成,但在建立完之後之後你可以允許普通資料庫使用者來使用它。要這樣做,給資料庫普通使用者授予表空間上的CREATE
許可權。
表、索引和整個資料庫都可以被分配到特定的表空間。想這麼做,在給定表空間上有 CREATE
許可權的使用者必須把表空間的名字以一個引數的形式傳遞給相關的命令。例如,下面的命令在表空間space1
中建立一個表:
CREATE TABLE foo(i int) TABLESPACE space1;
另外,還可以使用default_tablespace引數:
SET default_tablespace = space1; CREATE TABLE foo(i int);
當default_tablespace
被設定為非空字串,那麼它就為沒有顯式TABLESPACE
子句的CREATE TABLE
和CREATE INDEX
命令提供一個隱式TABLESPACE
子句。
還有一個temp_tablespaces引數,它決定臨時表和索引的位置,以及用於大資料集排序等目的的臨時檔案的位置。 這可以是一個表空間名的列表,而不是隻有一個。因此,與臨時物件有關的負載可以散佈在多個表空間上。每次要建立一個臨時物件時,將從列表中隨機取一個成員來存放它。
與一個資料庫相關聯的表空間用來儲存該資料庫的系統目錄。此外,如果沒有給出TABLESPACE
子句並且沒有在default_tablespace
或temp_tablespaces
(如適用)中指定其他選擇,它還是在該資料庫中建立的表、索引和臨時檔案的預設表空間。如果一個資料庫被建立時沒有指定表空間,它會使用其模板資料庫相同的表空間。
當初始化資料庫集簇時,會自動建立兩個表空間。pg_global
表空間被用於共享系統目錄。pg_default
表空間是template1
和template0
資料庫的預設表空間(並且,因此也將是所有其他資料庫的預設表空間,除非被一個CREATE DATABASE
中的TABLESPACE
子句覆蓋)。
表空間一旦被建立,就可以被任何資料庫使用,前提是請求的使用者具有足夠的許可權。這也意味著,一個表空間只有在所有使用它的資料庫中所有物件都被刪除掉之後才可以被刪掉。
要刪除一個空的表空間,使用DROP TABLESPACE命令。
要確定現有表空間的集合,可檢查pg_tablespace
系統目錄,例如
SELECT spcname FROM pg_tablespace;
psql程式的db
元命令也可以用來列出現有的表空間。
PostgreSQL使用符號連線來簡化表空間的實現。這就意味著表空間只能在支援符號連線的系統上使用。
$PGDATA/pg_tblspc
目錄包含指向集簇中定義的每個非內建表空間的符號連線。 儘管我們不推薦,但還是可以通過手工重定義這些連線來調整表空間佈局。在伺服器執行時,絕不要這樣做。注意在 PostgreSQL 9.1 及更早的版本中,你將還需要用新位置更新pg_tablespace
目錄(如果你不更新,pg_dump
將繼續輸出舊的表空間位置)。
本文轉自PostgreSQL中文社群,原文連結:22.6. 表空間
相關文章
- PostgreSQL10.1手冊_部分III.伺服器管理_第18章伺服器設定和操作_18.4.管理核心資源SQL伺服器
- PostgreSQL10.1手冊_部分III.伺服器管理_第31章邏輯複製_31.7.安全SQL伺服器
- 乾貨分享|優炫資料庫管理之表空間資料庫
- 表空間和資料檔案的管理
- 達夢資料庫表空間管理方法及實戰演示資料庫
- PostgreSQL10.1手冊_部分II.SQL語言_第8章資料型別_8.12.UUID型別SQL資料型別UI
- PostgreSQL:表空間-->資料庫-->表SQL資料庫
- PostgreSQL10.1手冊_部分IV.客戶端介面_第33章libpq-C庫_33.18.SSL支援SQL客戶端
- openGauss中如何管理表空間
- Oracle OCP(49):表空間管理Oracle
- phpMyAdmin管理資料庫和資料表PHP資料庫
- 資料庫管理-第122期 配置Halo資料庫(202301204)資料庫
- 資料庫管理-第120期 初探Halo資料庫(202301201)資料庫
- sybase iq表空間管理常用語句
- DB2建立資料庫,建立表空間DB2資料庫
- 資料庫管理-第142期 DBA?DBA!(20240131)資料庫
- 資料庫管理-第127期 LSM Tree(202301225)資料庫
- 達夢資料庫表空間等空間大小查詢方法總結資料庫
- Oracle表空間的管理方式(LMT、DMT)--本地和字典管理Oracle
- SYSTEM 表空間管理及備份恢復
- 2.5.3 建立本地管理的SYSTEM表空間
- 基本 SQL 之資料庫及表管理SQL資料庫
- PostgreSQL10.1手冊_部分IV.客戶端介面_第33章libpq-C庫_33.19.線上程化程式中的行為SQL客戶端
- Oracle資料庫管理——表資料庫高水位及shrink操作Oracle資料庫
- PostgreSQL10.1手冊_部分II.SQL語言_第15章並行查詢_15.4.並行安全性SQL並行
- 資料庫管理-第124期 資料庫圈的夜郎自大,危!(202301213)資料庫
- 資料庫管理-第128期 2023總結(202301229)資料庫
- 《MySQL 入門教程》第 03 篇 管理資料庫MySql資料庫
- [轉帖]達夢資料庫-統計資料表資料量及空間表大小資料庫
- 2.5.5 使用自動Undo管理: 建立 Undo 表空間
- 達夢表空間管理注意事項總結
- 2.5.9 在資料庫建立期間支援大檔案表空間資料庫
- GBase8s 檢視資料庫表空間資訊資料庫
- 清理oracle資料庫空間Oracle資料庫
- OracleDatabase——資料庫表空間dmp匯出與匯入OracleDatabase資料庫
- ASA日常管理手冊
- Hadoop之Hive本地與遠端mysql資料庫管理模式安裝手冊HadoopHiveMySql資料庫模式
- oracle建立臨時表空間和資料表空間以及刪除Oracle