全部产品
Search
文档中心

AnalyticDB:Periksa Ketidaksesuaian antara AnalyticDB for PostgreSQL V4.3 dan V6.0

更新时间:Jun 26, 2025

AnalyticDB for PostgreSQL V6.0 memiliki konfigurasi yang tidak kompatibel dengan V4.3. Untuk meningkatkan instans AnalyticDB for PostgreSQL Anda dari V4.3 ke V6.0, Anda harus memproses terlebih dahulu konfigurasi yang tidak kompatibel. Topik ini menjelaskan cara menjalankan skrip shell untuk memeriksa ketidaksesuaian antara AnalyticDB for PostgreSQL V4.3 dan V6.0. Dalam contoh ini, sistem operasi Linux digunakan. Jika Anda menggunakan Windows, Anda dapat merujuk pada pernyataan SQL dalam skrip.

Tindakan pencegahan

Item pemeriksaan tidak mencakup pernyataan SQL untuk bisnis Anda atau prosedur tersimpan, fungsi, atau tampilan kustom. Anda dapat memverifikasi item yang dikecualikan dalam instans AnalyticDB for PostgreSQL V6.0.

Contoh skrip shell

#!/bin/bash

#
# Hak Cipta (c) 2020, Alibaba Group, Inc.
#
# Deskripsi:
periksa item yang tidak didukung sebelum peningkatan instans.
# Penggunaan:  sh 4x_to_6x_check.sh <PGHOST> <PGPORT> <PGUSER> <PGPASSWORD>
# Daftar Periksa:
#          1) Periksa versi instans AnalyticDB for PostgreSQL.
#          2) Periksa pustaka yang tidak dipindahkan.
#          3) Periksa kunci distribusi tabel yang tidak didukung.
#          4) Periksa jenis bidang tabel yang tidak didukung.
#          5) Periksa ekstensi yang tidak didukung.
#          6) Periksa prosedur tersimpan dan fungsi yang tidak didukung.
#          7) Periksa tampilan yang tidak didukung.
# Perhatian:        Jika satu atau lebih pesan kesalahan dikembalikan, Anda harus memodifikasi konfigurasi yang sesuai.
#

if [[ $# -lt 4 ]]; then
    echo "Penggunaan:
$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')"

# Periksa versi instans AnalyticDB for PostgreSQL.
check_version()
{
  echo ''
  echo $db_ver
  echo ''
  echo '********** periksa versi dasar...'
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 'KESALAHAN: silakan tingkatkan versi minor...'
else
    echo 'lulus......'
fi
}

# Periksa pustaka yang tidak dipindahkan.
check_libraries()
{
  echo ''
  echo '********** periksa pustaka yang tidak dipindahkan...'
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 "PERINGATAN: silakan pindahkan pustaka secara manual..."
else
    echo 'lulus......'
fi
}

# Periksa kunci distribusi tabel yang tidak didukung.
check_table_did()
{
  echo ''
  echo '********** periksa jenis distributedId tabel yang tidak didukung...'
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 'KESALAHAN: silakan ubah jenis distributedId tabel secara manual...'
else
    echo 'lulus......'  fi
}

# Periksa jenis bidang tabel yang tidak didukung.
check_table_ftype()
{
  echo ''
  echo '********** periksa jenis bidang tabel yang tidak didukung...' 
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 'KESALAHAN: silakan ubah jenis bidang tabel secara manual...'

else
    echo 'lulus......'
    fi
}

# Periksa ekstensi yang tidak didukung.
check_extensions()
{
  echo ''
  echo '********** periksa ekstensi yang tidak didukung...' 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 'PERINGATAN: silakan hapus ekstensi yang tidak berguna secara manual...'
    echo 'REF HAPUS EXTENSION SQL: drop extension <name> '
  else
    echo 'lulus......'
fi
}

# Periksa prosedur tersimpan dan fungsi yang tidak didukung.
check_procs()
{
  echo ''
  echo '********** periksa procs yang tidak didukung...'
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 'PERINGATAN: silakan hapus/perbaiki proc/fungsi secara manual setelah dipindahkan...'
else
    echo 'lulus......'
fi
}

# Periksa tampilan yang tidak didukung.
check_views()
{
  echo ''
  echo '********** periksa tampilan yang tidak didukung...'
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 'PERINGATAN: silakan hapus tampilan yang tidak berguna secara manual...'

else
    echo 'lulus......'
fi
}

check_version
check_libraries
check_table_did
check_table_ftype
check_extensions
check_procs
check_views

Tabel 1. Parameter

Parameter Deskripsi
<PGHOST> Titik akhir yang digunakan untuk menghubungkan ke instans AnalyticDB for PostgreSQL V4.3.
<PGPORT> Nomor port yang digunakan untuk menghubungkan ke instans AnalyticDB for PostgreSQL V4.3.
<PGUSER> Nama pengguna yang digunakan untuk menghubungkan ke instans AnalyticDB for PostgreSQL V4.3.
<PGPASSWORD> Kata sandi untuk pengguna.

Prosedur

  1. Jalankan perintah berikut untuk menginstal klien PostgreSQL di perangkat Linux Anda:
    sudo yum install postgresql
  2. Lihat alamat IP publik perangkat Linux. Tambahkan alamat IP publik perangkat Linux ke daftar putih alamat IP untuk instans AnalyticDB for PostgreSQL V4.3 di konsol AnalyticDB for PostgreSQL. Untuk informasi lebih lanjut tentang cara mengonfigurasi daftar putih alamat IP, lihat Konfigurasikan Daftar Putih Alamat IP.
  3. Hubungkan ke instans AnalyticDB for PostgreSQL V4.3 menggunakan perangkat Linux.
    psql -h <PGHOST> -p <PGPORT> -U <PGUSER>
  4. Simpan skrip shell yang telah diedit sebagai file skrip seperti 4x_to_6x.sh. Dalam contoh ini, jalankan perintah berikut untuk menjalankan skrip 4x_to_6x_check.sh untuk pemeriksaan ketidaksesuaian:
    sh 4x_to_6x_check.sh <PGHOST> <PGPORT> <PGUSER> <PGPASSWORD>
  5. Ubah item yang tidak kompatibel dari instans AnalyticDB for PostgreSQL V4.3 berdasarkan pesan kesalahan yang dikembalikan. Setelah Anda memodifikasi item tersebut, jalankan skrip lagi untuk memverifikasi apakah item pemeriksaan kompatibel dengan AnalyticDB for PostgreSQL V6.0.

Hasil pemeriksaan sampel

  • Pesan "pass" tanpa "ERROR" menunjukkan bahwa item pemeriksaan kompatibel dengan AnalyticDB for PostgreSQL V6.0. Kode berikut menunjukkan bahwa semua item pemeriksaan kompatibel dengan AnalyticDB for PostgreSQL V6.0:

    • ********** periksa versi dasar...
      lulus......
      
      ********** periksa pustaka yang tidak dipindahkan...
      lulus......
      
      ********** periksa jenis distributedId tabel yang tidak didukung...
      lulus......
      
      ********** periksa jenis bidang tabel yang tidak didukung...
      lulus......
      
      ********** periksa ekstensi yang tidak didukung...
      lulus......
  • Jika hasilnya berisi satu atau lebih pesan kesalahan, Anda harus memodifikasi konfigurasi yang tidak kompatibel. Kode berikut menunjukkan bahwa semua item pemeriksaan tidak kompatibel dengan AnalyticDB for PostgreSQL V6.0:

    • PostgreSQL 8.2.15 (Greenplum Database 4.3.99.00 build dev) compiled on May 2 2020 09:35:15
      
      ********** periksa versi dasar...
      
      KESALAHAN: silakan tingkatkan versi minor...
      ********** periksa pustaka yang tidak dipindahkan...
      
      name   | language 
      ----------+----------
       select_1 | plpgsql
      (1 row)
      
      PERINGATAN: silakan pindahkan pustaka secara manual...
         ********** periksa jenis distributedId tabel yang tidak didukung... 
      dbname | schema | table_name | distributed_field | field_type 
      --------+--------+------------+-------------------+------------
       adbpg  | public | test1      | id                | money
      (1 row)
      
      KESALAHAN: silakan ubah jenis distributedId tabel secara manual...
       ********** periksa jenis bidang tabel yang tidak didukung...
      dbname | schema | table_name | field_name | field_type 
      --------+--------+------------+------------+------------
       adbpg  | public | test2      | name       | unknown
      (1 row)
      
      KESALAHAN: silakan ubah jenis bidang tabel secara manual...
      
      ********** periksa ekstensi yang tidak didukung...
      
      dbname | extname | extversion 
      --------+---------+------------
       adbpg  | varbitx | 1.0
      (1 row)
      
      PERINGATAN: silakan hapus ekstensi yang tidak berguna secara manual...
       REF HAPUS EXTENSION SQL: drop extension <name>
      Pesan Kesalahan Metode Modifikasi
      ERROR: please upgrade minor version... Upgrade the minor version dari instans AnalyticDB for PostgreSQL V4.3 di konsol AnalyticDB for PostgreSQL. Untuk informasi lebih lanjut, lihat Perbarui Versi Minor dari Sebuah Instans.
      WARN: please transfer libraries manually... Migrasikan pustaka yang digunakan dalam instans AnalyticDB for PostgreSQL V4.3.
      ERROR: please alter table distributedId types manually... Ubah kunci distribusi yang tidak kompatibel dalam instans AnalyticDB for PostgreSQL V4.3.
      ERROR: please alter table field types manually... Ubah jenis bidang yang tidak kompatibel dalam instans AnalyticDB for PostgreSQL V4.3.
      WARN: please drop useless extensions manually... Jika Anda perlu menggunakan tabel atau prosedur tersimpan yang relevan dengan ekstensi yang tidak kompatibel, ubah konfigurasi ekstensi tersebut. Jika ekstensi yang tidak kompatibel tidak digunakan dalam AnalyticDB for PostgreSQL V6.0, hapus ekstensi tersebut.