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

更新时间:
复制 MD 格式

本文介绍了云原生数据仓库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 table或copy语句时,使用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分布键

不支持

支持