4.3版本与6.0版本兼容性注意事项

更新时间:

本文介绍了云原生数据仓库AnalyticDB PostgreSQL版 4.3版本与6.0版本在兼容性上的注意事项,如果您需要将实例从4.3版本升级到6.0版本,请根据实际情况对本文提及的部分进行相应的修改。

优化器

名称

V4.3

V6.0

默认优化器

Legacy优化器

ORCA优化器

4.3版本与6.0版本都支持Legacy优化器和ORCA优化器,可根据需求选择使用,有关优化器的选择,请参见两种优化器的选择

转义符

  • 在6.0版本中,字符串的转义字符\ ,将作为字符串本身,不再表示转义符。

  • 可执行以下语句保持和4.3版本语义一致,但不建议这样操作。

    set standard_conforming_strings = off;
    说明

    上述语句仅对session级别生效。如果需要对集群生效,请提交工单,由云原生数据仓库AnalyticDB PostgreSQL版后台技术人员进行设置。

类型转换

  • 6.0版本中不再支持YYYYMMDDHH24MISS格式的字符串自动强转为时间戳类型。您可以通过系统内建函数to_timestamp/to_char,进行YYYYMMDDHH24MISS格式的字符串和时间戳之间的转换。

  • 6.0版本不再支持数字类型隐式转换成TEXT类型。如果4.3版本中有这类语句,升级到6.0版本后,您可以通过增加Function支持这类场景。比如:

    create or replace function substr(numeric, integer,integer)returns text as $$
    select substr($1::text,$2,$3);
    $$ language sql IMMUTABLE strict;
    create or replace function pg_catalog.btrim(str numeric) returns text as $$
    return $_[0];
    $$ language plperl IMMUTABLE strict;
    create or replace function to_date(timestamp, text) returns date as $$
    select to_date($1::text,$2);
    $$ language sql IMMUTABLE strict;
    create or replace function to_date(integer, text) returns date as $$
    select to_date($1::text,$2);
    $$ language sql IMMUTABLE strict;
  • 如果有SQL或Function需要隐式转换成TEXT类型的场景,会受到影响,需要手工改写。

外部表错误日志

6.0版本不支持在create external tablecopy语句时,使用into error_table子句。您可以使用系统函数代替into error_table子句的功能。

gp_read_error_log('$external_table')
gp_truncate_error_log('$external_table')

数据类型

  • NUMERIC类型的文件存储格式变化,会影响到磁盘空间使用;

  • MONEY类型由32位改为64位,会影响磁盘空间使用;

  • 6.0版本不支持以下数据类型作为分布键:

    • abstime

    • reltime

    • tinterval

    • money

    • anyarray

关键字

6.0版本新增、修改、删除了部分关键字。(数据库对象的命名,不可以与关键字冲突)。

关键字不同的分类,含义不一样。可以通过如下命令,查看所有关键字和具体分类。(4.3 和 6.0 版本均适用)。

select * from pg_get_keywords();
表 1. 关键字分类说明

catcode

catdesc

说明

U

unreserved

不保留,可以用于任何对象(视图、表、函数、类型、索引、字段、类型等)。

C

unreserved (cannot be function or type name)

不保留,但是不可用于函数、类型名。

T

reserved (can be function or type name)

保留,但是可用于函数、类型名。

R

reserved

保留,不可用于任何对象名称。

表 2. 4.3版和6.0版本分类不同的关键字列表如下:

关键字

v4.3

v6.0

between

reserved

unreserved (cannot be function or type name)

collation

reserved (can be function or type name)

concurrently

unreserved

reserved (can be function or type name)

convert

unreserved (cannot be function or type name)

filter

reserved

unreserved

lateral

-

reserved

new

reserved

off

reserved

unreserved

old

reserved

percentile_cont

unreserved (cannot be function or type name)

percentile_disc

unreserved (cannot be function or type name)

range

reserved

unreserved

reindex

unreserved

reserved

rows

reserved

unreserved

sort

reserved

reserved (can be function or type name)

variadic

reserved

系统表

系统表在4.3版和6.0版中有部分区别,如果您的业务逻辑引用了以下系统表,请进行修改否则将引起报错。

V4.3

V6.0

说明

pg_class.reltoastidxid

已删除

pg_stat_activity.procpid

pg_stat_activity.pid

进程号

pg_stat_activity.current_query

pg_stat_activity.state

pg_stat_activity.query

拆分为两列,state标识后端状态,query标识当前执行的请求

gp_distribution_policy.attrnums

gp_distribution_policy.distkey

修改列名,且数据类型变int2vector

sesion_level_memory_consumption.__gp_localid

sesion_level_memory_consumption.__gp_masterid

已删除

pg_filespace

pg_filespace_entry

已删除

内置函数的参数

在6.0版本中,一些内置函数的参数发生了变化。

V4.3

V6.0

说明

int4_avg_accum(bytea, integer)

int4_avg_accum(bigint[], integer)

string_agg(expression)

string_agg(expression, delimiter)

把一个表达式变成字符串

其他用法

名称

V4.3

V6.0

left()函数

不支持

支持

update分布键

不支持

支持