本例介紹通過 psql 命令將 PostgreSQL 資料備份檔案恢複到目標 RDS 中。

背景資訊

PostgreSQL 支援邏輯備份。我們使用 pg_dump 邏輯備份功能,匯出備份檔案,再通過 psql 匯入到 RDS 中,實現將 PostgreSQL 的資料匯入到 RDS 中。

前提條件

已完成 RDS 執行個體資料庫的準備,可參見申請外網地址建立資料庫和帳號

準備本機資料

  1. 通過 PostgreSQL 用戶端,串連本地 PostgreSQL 資料庫。
  2. 執行如下命令,備份資料。
    pg_dump -U username -h hostname -p port databasename -f filename

    參數說明如下:

    • username:本機資料庫使用者名
    • hostname:本機資料庫主機名稱,如果是在本機資料庫主機登入,可以使用 localhost
    • port:本機資料庫連接埠號碼
    • databasename:要備份的本機資料庫名
    • filename:要產生的備份檔案名稱

    例如,資料庫使用者 William 要備份本地 PostgreSQL 資料庫,登入 PostgreSQL 主機後,通過如下命令備份資料。

    pg_dump -U William -h localhost -p 3433 pg001 -f pg001.sql

正式遷移操作

说明 通過 RDS 內網恢複資料,網路更穩定,資料更安全。建議您通過將資料上傳到Elastic Compute Service 上,然後通過內網將資料恢複到目標 RDS上。如果資料檔案太大,可以先壓縮後再上傳。本例以該方式為例進行說明。
  1. 登入Elastic Compute Service。
  2. 通過 PostgreSQL 用戶端,執行如下命令將資料匯入到 RDS 中。
    psql -U username -h hostname -d desintationdb -p port -f dumpfilename.sql

    參數說明如下:

    • username:RDS 上的 PostgreSQL 資料庫使用者名
    • hostname:RDS 上的 PostgreSQL 資料庫地址
    • port:RDS 上的 PostgreSQL 資料庫連接埠號碼
    • databasename:RDS 上的 PostgreSQL 資料庫名
    • filename:本地備份資料檔案名

    如:

    psql -U William -h postgresql.rds.aliyuncs.com -d pg001 -p 3433 -f pg001.sql

    由於 RDS 資料庫的使用權限設定和本機資料庫不一致,在資料匯入處理程序當中可能會出現一些與許可權相關的 WARNING 或 ERROR,可以忽略,如:

    WARNING:  no privileges could be revoked for "xxxxx"
    ERROR:  role "xxxxx" does not exist