pg_upgradeを使用して、VCIの拡張を使用しているFUJITSU Enterprise Postgres 9.5のインスタンスをFUJITSU Enterprise Postgres 10以降にアップグレードする場合、FUJITSU Enterprise Postgres 9.5とFUJITSU Enterprise Postgres 10以降の間でVCIの拡張の互換性がないため、以下を実行する必要があります。
アップグレード前の手順
VCIインデックスの削除
すべてのVCIインデックスを削除するには、まず以下のクエリを実行して、データベースに作成されたすべてのVCIインデックスを確認します。pg_upgradeの終了後、これらのインデックスがFUJITSU Enterprise Postgres 10以降で再作成されることを確認します。
SELECT relname AS index_relname,* FROM pg_class WHERE realm IN (SELECT oid FROM pg_am WHERE amname='vci');
上記の各index_relnameで、以下のコマンドを実行してCREATE INDEX定義を取得します。取得したCREATE INDEX定義は、FUJITSU Enterprise Postgres 10以降のインスタンスでインデックスを再作成するために使用します。
続けて、データベースからインデックスを削除します。
SELECT pg_get_indexdef('indexName'::regclass); DROP INDEX indexName CASCADE;
すべてのVCI内部オブジェクトの削除
FUJITSU Enterprise Postgres 9.5で作成されているVCI内部オブジェクトをすべて削除するには、以下のコマンドを実行します。これらのオブジェクトは、FUJITSU Enterprise Postgres 10以降で、VCIに対してCREATE EXTENSIONコマンドを実行すると自動的に作成されます。
DELETE FROM pg_depend WHERE refobjid IN (SELECT oid FROM pg_extension WHERE extname='vci');
DROP FUNCTION vci_build(internal, internal, internal);
DROP FUNCTION vci_buildempty(internal);
DROP FUNCTION vci_insert(internal, internal, internal, internal, internal, internal);
DROP FUNCTION vci_bulkdelete(internal, internal, internal, internal);
DROP FUNCTION vci_vacuumcleanup(internal, internal);
DROP FUNCTION vci_canreturn(internal);
DROP FUNCTION vci_costestimate(internal, internal, internal, internal, internal, internal, internal);
DROP FUNCTION vci_options(_text, bool);
DROP FUNCTION vci_beginscan(internal, internal, internal);
DROP FUNCTION vci_rescan(internal, internal, internal, internal, internal);
DROP FUNCTION vci_gettuple(internal, internal);
DROP FUNCTION vci_getbitmap(internal, internal);
DROP FUNCTION vci_endscan(internal);
DROP FUNCTION vci_markpos(internal);
DROP FUNCTION vci_restrpos(internal);
DROP FUNCTION vci_check_supported_functions();
DROP FUNCTION vci_smc_main(IN testno int4);
DROP FUNCTION vci_check_supported_types();
DROP FUNCTION vci_index_size(IN vci_index_name text, OUT size int8);
DROP FUNCTION vci_runs_in_query();
DROP FUNCTION vci_runs_in_plan();
DROP FUNCTION vci_always_return_true();
DROP FUNCTION pgx_prewarm_vci(IN vci_index regclass, OUT prewarm_blks int8);
DROP FUNCTION vci_disable();
DROP FUNCTION vci_enable();
DROP OPERATOR FAMILY bool_ops USING vci CASCADE;
DROP OPERATOR FAMILY bytea_ops USING vci CASCADE;
DROP OPERATOR FAMILY char_ops USING vci CASCADE;
DROP OPERATOR FAMILY name_ops USING vci CASCADE;
DROP OPERATOR FAMILY int8_ops USING vci CASCADE;
DROP OPERATOR FAMILY int2_ops USING vci CASCADE;
DROP OPERATOR FAMILY int4_ops USING vci CASCADE;
DROP OPERATOR FAMILY text_ops USING vci CASCADE;
DROP OPERATOR FAMILY float4_ops USING vci CASCADE;
DROP OPERATOR FAMILY float8_ops USING vci CASCADE;
DROP OPERATOR FAMILY abstime_ops USING vci CASCADE;
DROP OPERATOR FAMILY reltime_ops USING vci CASCADE;
DROP OPERATOR FAMILY tinterval_ops USING vci CASCADE;
DROP OPERATOR FAMILY money_ops USING vci CASCADE;
DROP OPERATOR FAMILY bpchar_ops USING vci CASCADE;
DROP OPERATOR FAMILY date_ops USING vci CASCADE;
DROP OPERATOR FAMILY time_ops USING vci CASCADE;
DROP OPERATOR FAMILY timestamp_ops USING vci CASCADE;
DROP OPERATOR FAMILY timestamptz_ops USING vci CASCADE;
DROP OPERATOR FAMILY interval_ops USING vci CASCADE;
DROP OPERATOR FAMILY timetz_ops USING vci CASCADE;
DROP OPERATOR FAMILY bit_ops USING vci CASCADE;
DROP OPERATOR FAMILY varbit_ops USING vci CASCADE;
DROP OPERATOR FAMILY numeric_ops USING vci CASCADE;
DROP OPERATOR FAMILY uuid_ops USING vci CASCADE;
DELETE FROM pg_extension WHERE extname='vci';
DELETE FROM pg_am where amname=’vci’;
注意
FUJITSU Enterprise Postgres 9.5インスタンスでVCIの拡張をリストアするには、CREATE EXTENSIONコマンドを実行します。
アップグレード後の手順
"template0"以外のすべてのデータベースに対するpg_upgradeが完了したら、CREATE EXTENSIONコマンドを実行してVCIの拡張を作成し、必要に応じて手順1で削除されたすべてのVCIインデックスにCREATE INDEXを実行します。