

# 导出和导入 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;
   ```