<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 21.6\. 表空間 PostgreSQL里的表空間允許數據庫管理員在文件系統里定義那些代表數據庫對象的文件存放位置。 一旦創建了表空間,那么就可以在創建數據庫對象的時候引用它。 通過使用表空間,管理員可以控制一個PostgreSQL安裝的磁盤布局。 這么做至少有兩個用處。首先,如果初始化集群所在的分區或者卷用光了空間, 而又不能擴展,那么表空間可以在一個不同的分區上創建和使用, 直到系統可以重新配置。 第二,表空間允許管理員根據數據庫對象的使用模式安排數據位置,從而優化性能。比如, 一個很頻繁使用的索引可以放在非常快并且非常可靠的磁盤上,比如一種非常貴的固態設備。而同時, 一個存儲歸檔的數據,很少使用的或者對性能要求不高的表可以存儲在一個便宜但比較慢的磁盤系統上。 要定義一個表空間,使用[CREATE TABLESPACE](#calibre_link-99)命令,比如: ``` CREATE TABLESPACE fastspace LOCATION '/mnt/sda1/postgresql/data'; ``` 這個位置必須是一個現有的空目錄,并且屬于PostgreSQL系統用戶。 所有隨后在該表空間創建的對象都將被存放在這個目錄下的文件里。 > **Note:** 通常在一個邏輯文件系統上建立多個表空間沒有什么意義, 因為無法控制一個邏輯文件系統里不同文件的位置。不過,PostgreSQL 并不做這方面的任何強制,并且它實際上并不知道文件系統邊界。 它只知道在指定的目錄里存儲文件。 創建表空間本身必須用數據庫超級用戶身份進行,但之后你就可以允許普通數據庫用戶利用它了。 要做這件事情,在表空間上給這些用戶授予`CREATE`權限。 表、索引和整個數據庫都可以放在特定的表空間里。想要這么做的話, 在給定表空間上有`CREATE`權限的用戶必須把表空間的名字以一個參數的形式傳遞給相關的命令。 比如,下面的命令在表空間`space1`上創建一個表: ``` CREATE TABLE foo(i int) TABLESPACE space1; ``` 另外,還可以使用[default_tablespace](#calibre_link-90)參數: ``` SET default_tablespace = space1; CREATE TABLE foo(i int); ``` 只要`default_tablespace`被設置為非空字符串, 那么它就為沒有明確使用`TABLESPACE`子句的`CREATE TABLE` 和`CREATE INDEX`命令提供一個隱含的子句。 也有一個[temp_tablespaces](#calibre_link-91)參數,決定臨時表和索引的放置, 就和用于像存儲大數據集這樣的目的臨時文件一樣。這可能是一個表空間名字的列表, 而不是只有一個名字,所以與臨時對象相關聯的負載可以散布到多個表空間中。 每次創建臨時對象時選擇一個隨機的成員列表。 與一個數據庫相關聯的表空間用于存儲該數據庫的系統表。另外, 如果沒有給出`TABLESPACE`子句,并且沒有通過`default_tablespace` 或`temp_tablespaces`(視情況而定)指定其他選項,那么在數據庫中創建表, 索引和臨時文件時使用的是缺省表空間。如果創建數據庫時沒有給它聲明一個表空間, 那么它使用與它拷貝的模版數據庫相同的表空間。 當數據庫集群初始化時,自動創建兩個表空間。`pg_global`表空間用于共享的系統表。 `pg_default`是`template1`和`template0`數據庫的缺省表空間 (因此,這個表空間也將是任何其它數據庫的缺省表空間,除非在`CREATE DATABASE` 中通過`TABLESPACE`子句重寫)。 創建了表空間之后,它就可以用于任何數據庫,只要請求的用戶有足夠權限。 這意味著除非我們把使用這個表空間的所有數據庫里的所有對象都刪除掉,否則我們不能刪除該表空間。 要刪除一個空的表空間,使用[DROP TABLESPACE](#calibre_link-112)命令。 檢查[`pg_tablespace`](#calibre_link-523) 系統表就可以獲取現有的表空間,比如 ``` SELECT spcname FROM pg_tablespace; ``` [psql](#calibre_link-23)程序的`\db`元命令也可以用于列出現有表空間。 為了簡化表空間的實現,PostgreSQL使用了符號連接。 這就意味著表空間_只能_在支持符號連接的系統上使用。 目錄`$PGDATA/pg_tblspc`包含指向集群里定義的每個非內置表空間的符號連接。 盡管我們不建議,但是我們還是可能通過手工重定義這些連接來調整表空間的布局。 在服務器運行的時候不要這么干。注意在PostgreSQL 9.1及以前,你仍需要用新的位置更新 `pg_tablespace`表。如果你不這么做,`pg_dump`將繼續顯示舊的表空間位置。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看