Todos los productos
Search
Centro de documentos

AnalyticDB:Comprobación de incompatibilidades entre AnalyticDB for PostgreSQL V4.3 y V6.0

Última actualización: Sep 04, 2026

AnalyticDB for PostgreSQL V6.0 incluye configuraciones incompatibles con la versión V4.3. Para actualizar sus instancias de AnalyticDB for PostgreSQL de V4.3 a V6.0, debe procesar previamente las configuraciones incompatibles. Este tema describe cómo ejecutar un script de shell para comprobar si existen incompatibilidades entre AnalyticDB for PostgreSQL V4.3 y V6.0. En este ejemplo se utiliza un sistema operativo Linux. Si usa Windows, consulte las sentencias SQL incluidas en el script.

Precauciones

Los elementos de comprobación no incluyen sentencias SQL de su negocio ni procedimientos almacenados, funciones o vistas personalizadas. Compruebe los elementos excluidos directamente en las instancias de AnalyticDB for PostgreSQL V6.0.

Script de shell de ejemplo

#!/bin/bash

#
# Copyright (c) 2020, Alibaba Group, Inc.
#
# Description:
check unsupported items before upgrade instance.
# Usage:  sh 4x_to_6x_check.sh <PGHOST> <PGPORT> <PGUSER> <PGPASSWORD>
# CheckList:
#          1) Check the version of the AnalyticDB for PostgreSQL instance.
#          2) Check the libraries that are not transferred.
#          3) Check the unsupported distribution keys for tables.
#          4) Check the unsupported field types for tables.
#          5) Check the unsupported extensions.
#          6) Check the unsupported stored procedures and functions.
#          7) Check the unsupported views.
# Notice:        If one or more error messages are returned, you must modify the corresponding configurations.
#

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

# Check the version of the AnalyticDB for PostgreSQL instance.
check_version()
{
  echo ''
  echo $db_ver
  echo ''
  echo '********** check base version...'
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: please upgrade minor version...'
else
    echo 'pass......'
fi
}

# Check the libraries that are not transferred.
check_libraries()
{
  echo ''
  echo '********** check untransferred libraries...'
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: please transfer libraries manually..."
else
    echo 'pass......'
fi
}

# Check the unsupported distribution keys for tables.
check_table_did()
{
  echo ''
  echo '********** check unsupported table distributedId types...'
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: please alter table distributedId types manually...'
else
    echo 'pass......'  fi
}

# Check the unsupported field types for tables.
check_table_ftype()
{
  echo ''
  echo '********** check unsupported table field types...' 
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: please alter table field types manually...'

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

# Check the unsupported extensions.
check_extensions()
{
  echo ''
  echo '********** check unsupported extensions...' 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: please drop useless extensions manually...'
    echo 'REF DROP EXTENSION SQL: drop extension <name> '
  else
    echo 'pass......'
fi
}

# Check the unsupported stored procedures and functions.
check_procs()
{
  echo ''
  echo '********** check unsupported procs...'
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: please drop/repair proc/function manually after transferred...'
else
    echo 'pass......'
fi
}

# Check the unsupported views.
check_views()
{
  echo ''
  echo '********** check unsupported views...'
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: please drop useless views manually...'

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

check_version
check_libraries
check_table_did
check_table_ftype
check_extensions
check_procs
check_views

Tabla 1. Parámetros

Parámetro

Descripción

Endpoint utilizado para conectarse a la instancia de AnalyticDB for PostgreSQL V4.3.

Puerto utilizado para conectarse a la instancia de AnalyticDB for PostgreSQL V4.3.

Nombre de usuario utilizado para conectarse a la instancia de AnalyticDB for PostgreSQL V4.3.

Contraseña del usuario.

Procedimiento

  1. Ejecute el siguiente comando para instalar un cliente de PostgreSQL en su dispositivo Linux:

    sudo yum install postgresql
  2. Consulte la dirección IP pública del dispositivo Linux. Agregue esta dirección IP pública a una lista blanca de direcciones IP para la instancia de AnalyticDB for PostgreSQL V4.3 en la consola de AnalyticDB for PostgreSQL. Para obtener más información sobre cómo configurar una lista blanca de direcciones IP, consulte Configure a whitelist.

  3. Conéctese a la instancia de AnalyticDB for PostgreSQL V4.3 mediante el dispositivo Linux.

    psql -h <PGHOST> -p <PGPORT> -U <PGUSER>
  4. Guarde el script de shell editado como un archivo de script, por ejemplo, 4x_to_6x.sh. En este ejemplo, ejecute el siguiente comando para ejecutar el script 4x_to_6x_check.sh y comprobar incompatibilidades:

    sh 4x_to_6x_check.sh <PGHOST> <PGPORT> <PGUSER> <PGPASSWORD>
  5. Modifique los elementos incompatibles de la instancia de AnalyticDB for PostgreSQL V4.3 según los mensajes de error devueltos. Después de modificar los elementos, ejecute el script nuevamente para comprobar si son compatibles con AnalyticDB for PostgreSQL V6.0.

Resultados de comprobación de ejemplo

  • **Un mensaje "pass" sin "ERROR" indica que los elementos comprobados son compatibles con AnalyticDB for PostgreSQL V6.0. El siguiente código muestra que todos los elementos son compatibles con AnalyticDB for PostgreSQL V6.0:**

    • ********** check base version...
      pass......
      
      ********** check untransferred libraries...
      pass......
      
      ********** check unsupported table distributedId types...
      pass......
      
      ********** check unsupported table field types...
      pass......
      
      ********** check unsupported extensions...
      pass......
  • **Si los resultados contienen uno o más mensajes de error, debe modificar las configuraciones incompatibles. El siguiente código muestra que todos los elementos comprobados son incompatibles con 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
      
      ********** check base version...
      
      ERROR: please upgrade minor version...
      ********** check untransferred libraries...
      
      name   | language 
      ----------+----------
       select_1 | plpgsql
      (1 row)
      
      WARN: please transfer libraries manually...
         ********** check unsupported table distributedId types... 
      dbname | schema | table_name | distributed_field | field_type 
      --------+--------+------------+-------------------+------------
       adbpg  | public | test1      | id                | money
      (1 row)
      
      ERROR: please alter table distributedId types manually...
       ********** check unsupported table field types...
      dbname | schema | table_name | field_name | field_type 
      --------+--------+------------+------------+------------
       adbpg  | public | test2      | name       | unknown
      (1 row)
      
      ERROR: please alter table field types manually...
      
      ********** check unsupported extensions...
      
      dbname | extname | extversion 
      --------+---------+------------
       adbpg  | varbitx | 1.0
      (1 row)
      
      WARN: please drop useless extensions manually...
       REF DROP EXTENSION SQL: drop extension <name>

      Mensaje de error

      Método de modificación

      ERROR: please upgrade minor version...

      Upgrade the minor version de la instancia de AnalyticDB for PostgreSQL V4.3 en la consola de AnalyticDB for PostgreSQL. Para obtener más información, consulte Version upgrade.

      WARN: please transfer libraries manually...

      Migre las bibliotecas utilizadas en la instancia de AnalyticDB for PostgreSQL V4.3.

      ERROR: please alter table distributedId types manually...

      Modifique las claves de distribución incompatibles en la instancia de AnalyticDB for PostgreSQL V4.3.

      ERROR: please alter table field types manually...

      Modifique los tipos de campo incompatibles en la instancia de AnalyticDB for PostgreSQL V4.3.

      WARN: please drop useless extensions manually...

      Si necesita usar tablas o procedimientos almacenados relacionados con las extensiones incompatibles, modifique las configuraciones de dichas extensiones. Si las extensiones incompatibles no se utilizan en AnalyticDB for PostgreSQL V6.0, elimínelas.