

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 匯出和匯入 Aurora PostgreSQL 的受管計劃
<a name="AuroraPostgreSQL.Optimize.Maintenance.ExportingImporting"></a>

您可以匯出受管計劃，再匯入另一個資料庫執行個體中。

**匯出受管計劃**  
獲授權使用者可以將 `apg_plan_mgmt.plans` 資料表的任何子集複製到另一個資料表，然後使用 `pg_dump` 命令儲存它。以下是範例。

```
CREATE TABLE plans_copy AS SELECT * 
FROM apg_plan_mgmt.plans [ WHERE predicates ] ;
```

```
% pg_dump --table apg_plan_mgmt.plans_copy -Ft mysourcedatabase > plans_copy.tar
```

```
DROP TABLE apg_plan_mgmt.plans_copy;
```

**匯入受管計劃**

1. 將所匯出受管計劃的 .tar 檔案複製到將還原計劃的系統上。

1. 使用 `pg_restore` 命令將 tar 檔案複製到新的資料表。

   ```
   % pg_restore --dbname mytargetdatabase -Ft plans_copy.tar
   ```

1. 合併 `plans_copy` 資料表與 `apg_plan_mgmt.plans` 資料表，如下列範例所示。
**注意**  
在某些情況下，您可能會從 `apg_plan_mgmt` 延伸套件的某個版本傾印，然後還原成不同的版本。在這種情況下，計劃資料表中的資料欄可能不同。如果是這樣的話，請明確命名各欄，而非使用 SELECT \$1。

   ```
   INSERT INTO apg_plan_mgmt.plans SELECT * FROM plans_copy
    ON CONFLICT ON CONSTRAINT plans_pkey
    DO UPDATE SET
    status = EXCLUDED.status,
    enabled = EXCLUDED.enabled,
    -- Save the most recent last_used date 
    --
    last_used = CASE WHEN EXCLUDED.last_used > plans.last_used 
    THEN EXCLUDED.last_used ELSE plans.last_used END, 
    -- Save statistics gathered by evolve_plan_baselines, if it ran:
    --
    estimated_startup_cost = EXCLUDED.estimated_startup_cost,
    estimated_total_cost = EXCLUDED.estimated_total_cost,
    planning_time_ms = EXCLUDED.planning_time_ms,
    execution_time_ms = EXCLUDED.execution_time_ms,
    total_time_benefit_ms = EXCLUDED.total_time_benefit_ms, 
    execution_time_benefit_ms = EXCLUDED.execution_time_benefit_ms;
   ```

1. 將受管計劃重新載入共用記憶體，並移除暫時計劃資料表。

   ```
   SELECT apg_plan_mgmt.reload(); -- refresh shared memory
   DROP TABLE plans_copy;
   ```