すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:バージョン 4.3 から 6.0 へのアップグレード時の互換性確認ガイド

最終更新日:Mar 29, 2026

AnalyticDB for PostgreSQL V6.0 では、V4.3 と互換性のない構成が導入されています。アップグレードを実行する前に、V4.3 インスタンスに対して互換性確認スクリプトを実行し、互換性のない項目を特定・修正してください。本トピックでは Linux 環境を前提としています。Windows 環境をご利用の場合には、スクリプト内の SQL ステートメントを直接参照してください。

このスクリプトは、お客様のビジネス用 SQL ステートメント、カスタムストアドプロシージャ、関数、ビューには対応していません。これらの項目については、アップグレード後に V6.0 インスタンス上で個別に検証してください。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • AnalyticDB for PostgreSQL V4.3 インスタンスへネットワーク接続可能な Linux デバイス

  • V4.3 インスタンスの接続エンドポイント、ポート、ユーザー名、パスワード

  • AnalyticDB for PostgreSQL コンソール へのアクセス権限

確認スクリプト

このスクリプトは、以下の 7 つの互換性確認項目を順次チェックします。

  1. AnalyticDB for PostgreSQL インスタンスのバージョン

  2. V4.3 から転送されないライブラリ

  3. テーブルのサポートされていない分散キーのデータ型

  4. テーブルのサポートされていないフィールドのデータ型

  5. サポートされていない拡張

  6. サポートされていないストアドプロシージャおよび関数

  7. サポートされていないビュー

#!/bin/bash

#
# Copyright (c) 2020, Alibaba Group, Inc.
#
# 説明:
# インスタンスのアップグレード前に、互換性のない項目をチェックします。
# 使用方法:  sh 4x_to_6x_check.sh <PGHOST> <PGPORT> <PGUSER> <PGPASSWORD>
# 確認項目:
#          1) AnalyticDB for PostgreSQL インスタンスのバージョンを確認します。
#          2) 転送されないライブラリを確認します。
#          3) テーブルのサポートされていない分散キーを確認します。
#          4) テーブルのサポートされていないフィールドのデータ型を確認します。
#          5) サポートされていない拡張を確認します。
#          6) サポートされていないストアドプロシージャおよび関数を確認します。
#          7) サポートされていないビューを確認します。
# 注意:        エラーメッセージが 1 件以上出力された場合、該当する構成を修正する必要があります。
#

if [[ $# -lt 4 ]]; then
    echo "使用方法:
$0 <PGHOST> <PGPORT> <PGUSER> <PGPASSWORD>"
    exit 1
fi
export PGHOST=$1
export PGPORT=$2
export PGUSER=$3
export PGPASSWORD=$4

db_ver=`psql -d postgres -c "copy (select version()) to stdout"`
db_names=`psql -d postgres -c "copy (select sodddatname from gp_toolkit.gp_size_of_database) to stdout"`
db_names=(${db_names})
db_len=${#db_names[@]}

unsupport6x_ext="('feature_extractor','varbitx')"
unsupport6x_disted_type="('money','tinterval')"
unsupport6x_type="('unknown')"

# AnalyticDB for PostgreSQL インスタンスのバージョンを確認します。
check_version()
{
  echo ''
  echo $db_ver
  echo ''
  echo '********** 基盤バージョンの確認...'
base_time=`date -d "2020-08-31" +%s`
  db_verdate=${db_ver##*compiled on}
  seconds=`date -d "$db_verdate" +%s`
  if [[ $seconds -lt $base_time ]]; then
    echo 'ERROR: マイナーバージョンをアップグレードしてください...'
else
    echo 'pass......'
fi
}

# 転送されないライブラリを確認します。
check_libraries()
{
  echo ''
  echo '********** 転送されないライブラリの確認...'
count=`psql -d postgres -c "copy (select count(1) from pg_catalog.pg_library) to stdout"`
  if [[ $count -gt 0 ]]; then
    psql -d postgres -c "select name,lanname language from pg_catalog.pg_library;"
    echo "WARN: ライブラリを手動で転送してください..."
else
    echo 'pass......'
fi
}

# テーブルのサポートされていない分散キーを確認します。
check_table_did()
{
  echo ''
  echo '********** テーブルのサポートされていない分散キーのデータ型の確認...'
count=0
  if [[ $db_ver == *8.2*4.3* ]]; then
    for ((i=0; i<$db_len; ++i)); do
      sql="select count(1) from pg_catalog.pg_class c,pg_catalog.pg_attribute a,pg_catalog.pg_type t,pg_catalog.gp_distribution_policy p where
      a.atttypid=t.oid and a.attrelid=c.oid and p.localoid=c.oid and a.attnum=any(p.attrnums) and a.attnum>0 and t.typname in $unsupport6x_disted_type"
      count1=`psql -d ${db_names[$i]} -c "copy ($sql) to stdout"`
      count=$((count + count1))
      if [[ $count1 -gt 0 ]]; then
        sql="select '${db_names[$i]}' dbname,n.nspname schema,c.relname table_name,a.attname distributed_field,t.typname field_type from
        pg_catalog.pg_namespace n,pg_catalog.pg_class c,pg_catalog.pg_attribute a,pg_catalog.pg_type t,pg_catalog.gp_distribution_policy p
        where a.atttypid=t.oid and n.oid=c.relnamespace and a.attrelid=c.oid and p.localoid=c.oid and a.attnum=any(p.attrnums) and a.attnum>0 and t.typname in $unsupport6x_disted_type order by schema,table_name;"
        psql -d ${db_names[$i]} -c "$sql"
      fi
    done
  fi
  if [[ $count -gt 0 ]]; then
    echo 'ERROR: テーブルの分散キーのデータ型を手動で変更してください...'
else
    echo 'pass......'  fi
}

# テーブルのサポートされていないフィールドのデータ型を確認します。
check_table_ftype()
{
  echo ''
  echo '********** テーブルのサポートされていないフィールドのデータ型の確認...'
count=0
  if [[ $db_ver == *8.2*4.3* ]]; then
    for ((i=0; i<$db_len; ++i)); do
      sql="select count(1) from pg_catalog.pg_class c,pg_catalog.pg_attribute a,pg_catalog.pg_type t where
      a.atttypid=t.oid and a.attrelid=c.oid and a.attnum>0 and t.typname in $unsupport6x_type"
      count1=`psql -d ${db_names[$i]} -c "copy ($sql) to stdout"`
      count=$((count + count1))
      if [[ $count1 -gt 0 ]]; then
        sql="select '${db_names[$i]}' dbname,n.nspname schema,c.relname table_name,a.attname field_name,t.typname field_type from
        pg_catalog.pg_namespace n,pg_catalog.pg_class c,pg_catalog.pg_attribute a,pg_catalog.pg_type t
        where a.atttypid=t.oid and n.oid=c.relnamespace and a.attrelid=c.oid and a.attnum>0 and t.typname in $unsupport6x_type order by schema,table_name;"
        psql -d ${db_names[$i]} -c "$sql"
      fi
    done
  fi
  if [[ $count -gt 0 ]]; then
    echo 'ERROR: テーブルのフィールドのデータ型を手動で変更してください...'

else
    echo 'pass......'
    fi
}

# サポートされていない拡張を確認します。
check_extensions()
{
  echo ''
  echo '********** サポートされていない拡張の確認...' count=0
  if [[ $db_ver == *8.2*4.3* ]]; then
    for ((i=0; i<$db_len; ++i)); do
      count1=`psql -d ${db_names[$i]} -c "copy (select count(1) from pg_catalog.pg_extension where extname in $unsupport6x_ext) to stdout"`
      count=$((count + count1))
      if [[ $count1 -gt 0 ]]; then
        psql -d ${db_names[$i]} -c "select '${db_names[$i]}' dbname,extname,extversion from pg_catalog.pg_extension where extname in $unsupport6x_ext;"
      fi
    done
  fi
  if [[ $count -gt 0 ]]; then
    echo 'WARN: 不要な拡張を手動で削除してください...'
    echo 'REF DROP EXTENSION SQL: drop extension <name> '
  else
    echo 'pass......'
fi
}

# サポートされていないストアドプロシージャおよび関数を確認します。
check_procs()
{
  echo ''
  echo '********** サポートされていないストアドプロシージャおよび関数の確認...'
count=0
  clause="lower(p.prosrc) like '%pg_stat_activity%'
  and ( lower(p.prosrc) like '%.procpid%' or lower(p.prosrc) like '%.current_query%' or lower(p.prosrc) like '%.waiting%' )
  and n.nspname not in ('gp_toolkit','information_schema')"
  if [[ $db_ver == *8.2*4.3* ]]; then
    for ((i=0; i<$db_len; ++i)); do
      count1=`psql -d ${db_names[$i]} -c "copy (select count(1) from pg_catalog.pg_proc p join pg_catalog.pg_namespace n on p.pronamespace = n.oid where $clause) to stdout"`
      count=$((count + count1))
      if [[ $count1 -gt 0 ]]; then
        psql -d ${db_names[$i]} -c "select '${db_names[$i]}' dbname,n.nspname schemaname,p.proname from pg_catalog.pg_proc p join pg_catalog.pg_namespace n on p.pronamespace = n.oid where $clause;"
      fi
    done
  fi
  if [[ $count -gt 0 ]]; then
    echo 'WARN: 転送後に、ストアドプロシージャおよび関数を手動で削除または修正してください...'
else
    echo 'pass......'
fi
}

# サポートされていないビューを確認します。
check_views()
{
  echo ''
  echo '********** サポートされていないビューの確認...'
count=0
  clause="lower(definition) like '%pg_stat_activity%'
  and ( lower(definition) like '%.procpid%' or lower(definition) like '%.current_query%' or lower(definition) like '%.waiting%' )
  and schemaname not in ('gp_toolkit','information_schema')"
  if [[ $db_ver == *8.2*4.3* ]]; then
    for ((i=0; i<$db_len; ++i)); do
      count1=`psql -d ${db_names[$i]} -c "copy (select count(1) from pg_catalog.pg_views where $clause) to stdout"`
      count=$((count + count1))
      if [[ $count1 -gt 0 ]]; then
        psql -d ${db_names[$i]} -c "select '${db_names[$i]}' schemaname,viewname from pg_catalog.pg_views where $clause;"
      fi
    done
  fi
  if [[ $count -gt 0 ]]; then
    echo 'WARN: 不要なビューを手動で削除してください...'

else
    echo 'pass......'
fi
}

check_version
check_libraries
check_table_did
check_table_ftype
check_extensions
check_procs
check_views

パラメーター

パラメーター説明
<PGHOST>AnalyticDB for PostgreSQL V4.3 インスタンスのエンドポイント
<PGPORT>AnalyticDB for PostgreSQL V4.3 インスタンスのポート
<PGUSER>AnalyticDB for PostgreSQL V4.3 インスタンスのユーザー名
<PGPASSWORD>ユーザーのパスワード

互換性確認の実行

  1. Linux デバイスに PostgreSQL クライアントをインストールします。

    sudo yum install postgresql
  2. Linux デバイスのパブリック IP アドレスを取得します。その IP アドレスを AnalyticDB for PostgreSQL コンソール で V4.3 インスタンスの IP アドレスホワイトリストに追加してください。詳細については、「AnalyticDB for PostgreSQL インスタンスの IP アドレスホワイトリストの設定」をご参照ください。

  3. Linux デバイスから V4.3 インスタンスへの接続が可能であることを確認します。

    psql -h <PGHOST> -p <PGPORT> -U <PGUSER>
  4. シェルスクリプトを 4x_to_6x_check.sh として保存し、実行します。

    sh 4x_to_6x_check.sh <PGHOST> <PGPORT> <PGUSER> <PGPASSWORD>
  5. 出力結果を確認します。ERROR または WARN メッセージが表示された場合は、以下の参考表に基づいて報告された項目を修正した後、再度スクリプトを実行して、すべての確認項目が正常に完了することを確認してください。

出力例

すべての確認項目が正常に完了した場合

7 つの確認項目すべてが V6.0 と互換性を持つ場合、出力は以下のようになります。

********** 基盤バージョンの確認...
pass......

********** 転送されないライブラリの確認...
pass......

********** テーブルのサポートされていない分散キーのデータ型の確認...
pass......

********** テーブルのサポートされていないフィールドのデータ型の確認...
pass......

********** サポートされていない拡張の確認...
pass......

********** サポートされていないストアドプロシージャおよび関数の確認...
pass......

********** サポートされていないビューの確認...
pass......

互換性のない項目が検出された場合

問題が検出された場合、出力には影響を受けるオブジェクトの詳細と、ERROR または WARN メッセージが含まれます。次の例では、すべての確認項目でエラーが発生しています。

PostgreSQL 8.2.15 (Greenplum Database 4.3.99.00 build dev) compiled on May 2 2020 09:35:15

********** 基盤バージョンの確認...

ERROR: マイナーバージョンをアップグレードしてください...
********** 転送されないライブラリの確認...

name   | language
----------+----------
 select_1 | plpgsql
(1 row)

WARN: ライブラリを手動で転送してください...
   ********** テーブルのサポートされていない分散キーのデータ型の確認...
dbname | schema | table_name | distributed_field | field_type
--------+--------+------------+-------------------+------------
 adbpg  | public | test1      | id                | money
(1 row)

ERROR: テーブルの分散キーのデータ型を手動で変更してください...
 ********** テーブルのサポートされていないフィールドのデータ型の確認...
dbname | schema | table_name | field_name | field_type
--------+--------+------------+------------+------------
 adbpg  | public | test2      | name       | unknown
(1 row)

ERROR: テーブルのフィールドのデータ型を手動で変更してください...

********** サポートされていない拡張の確認...

dbname | extname | extversion
--------+---------+------------
 adbpg  | varbitx | 1.0
(1 row)

WARN: 不要な拡張を手動で削除してください...
 REF DROP EXTENSION SQL: drop extension <name>

エラーおよび警告メッセージの参考情報

メッセージ操作
ERROR: マイナーバージョンをアップグレードしてください...V4.3 インスタンスのマイナーカーネルバージョンを AnalyticDB for PostgreSQL コンソール でアップグレードしてください。詳細については、「AnalyticDB for PostgreSQL インスタンスのマイナーカーネルバージョンの更新」をご参照ください。
WARN: ライブラリを手動で転送してください...V4.3 インスタンスから V6.0 インスタンスへライブラリを手動で移行してください。
ERROR: テーブルの分散キーのデータ型を手動で変更してください...出力結果に示された分散キーのデータ型を変更してください。サポートされていないデータ型は money および tinterval です。
ERROR: テーブルのフィールドのデータ型を手動で変更してください...出力結果に示されたフィールドのデータ型を変更してください。サポートされていないデータ型は unknown です。
WARN: 不要な拡張を手動で削除してください...各リストされた拡張について、V6.0 での使用に合わせて設定を更新するか、DROP EXTENSION <name> を使用して削除してください。サポートされていない拡張は feature_extractor および varbitx です。
WARN: 転送後に、ストアドプロシージャおよび関数を手動で削除または修正してください...インスタンスの転送後に、出力結果に示されたストアドプロシージャおよび関数を削除または修正してください。
WARN: 不要なビューを手動で削除してください...アップグレード前に、出力結果に示されたビューを削除してください。

次のステップ

すべての確認項目が正常に完了した後、AnalyticDB for PostgreSQL インスタンスを V4.3 から V6.0 へアップグレードできます。