导出和导入 Aurora PostgreSQL 的托管式计划 - Amazon Aurora

导出和导入 Aurora PostgreSQL 的托管式计划

您可以导出托管计划并将其导入到其他数据库实例。

导出托管计划

授权用户可以将 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 文件,复制到将要还原计划的系统中。

  2. 使用 pg_restore 命令将 tar 文件复制到新表。

    % pg_restore --dbname mytargetdatabase -Ft plans_copy.tar
  3. plans_copy 表与 apg_plan_mgmt.plans 表合并,如以下示例所示。

    注意

    有些情况下,您可能从 apg_plan_mgmt 扩展的一个版本转储并还原到其他版本。在这些情况下,计划表中的列可能不同。如果是这样,明确命名列而不是使用 SELECT *。

    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;
  4. 将托管计划重新加载到共享内存中,删除临时计划表。

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