MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:

2017年2月27日 星期一

PostgreSQL 中設置 Tablespace 的注意事項

在 PostgreSQL 中,也有「像」Oracle 資料庫一樣,有所謂的 Tablespace 一詞。不過兩者的概念著實的不一樣。
PostgreSQL 裡面,每個表格都是以獨立的檔案,並且放置到 $PGDATA/base/ 底下的目錄,並以資料庫物件的 OID 命名。所以資料庫的大小,預設配置下,便取決於 $PGDATA 所在的硬碟分割區大小。

為了擴張資料庫的資料到別處(例如,新增的硬碟),在 PostgreSQL 使用 Tablespace 指令達成。

以下是一個使用範例
postgres=# CREATE TABLESPACE another_tblspc
   LOCATION '/another/directory/location';

這會在 $PGDATA/pg_tblspc/ 裡面用 Tablespace 的 OID 建立一個 Soft Link 的目錄連結,指向設定的目錄位置。

因此要擴充資料存放空間,步驟如下:
1. 準備新增分割區(例如:新加分割好的硬碟)
2. 把新分割區在作業系統掛載起來(例如,用 /etc/fstab 達成開機自動掛載,或是用 LVM 處理)。如上例的話,便是掛載到 /another/directory/location 目錄。
3. 設置好該目錄的存取權限
4. 然後在 PostgreSQL 裡面執行上面的 CREATE TABLESPACE 指令
5. 最後,把要建立在該硬碟上的資料庫物件移動過去(ALTER TABLE . . . SET TABLESPACE)/建立上去(CREATE DATABASE . . . TABLESPACE

由於 PostgreSQL 資料目錄 $PGDATA 是整體的資料,單獨取出個別檔案無法使用。要進行備份,便需要「整個」一起備份才行。

當設置自訂的 Tablespace 時,實際裝有資料的 Tablespace 目錄裡面的東西,當然也是 $PGDATA 的一部分。所以這裡的東西也不能擅自亂動。亂動的後果就會造成整個資料庫壞掉。

因此進行資料庫的全備份(Base Backup)時,需要同時對 $PGDATA 以及外部 Tablespace 目錄進行備份;從備份檔進行還原時,這些都要全部解壓縮完畢,並且設置 $PGDATA/pg_tblspc/ 裡面的 Soft Link,指向 Tablespace 目錄(參考先前筆記)。才能進行 Point-in-Time-Recovery 還原。

所以建立 Tablespace 時,不要把自建 Tablespace 指定目錄指到 $PGDATA 底下
CREATE TABLESPACE fastspace LOCATION '$PGDATA/my_tablespace_dir';

這樣設置,在使用 pg_basebackup 指令進行資料庫備份時,會因為指令跟著目錄連結,把 $PGDATA 「重複備份」一次。造成困擾。


參考:

沒有留言:

張貼留言