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 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();
catcode | catdesc | 说明 |
U | unreserved | 不保留,可以用于任何对象(视图、表、函数、类型、索引、字段、类型等)。 |
C | unreserved (cannot be function or type name) | 不保留,但是不可用于函数、类型名。 |
T | reserved (can be function or type name) | 保留,但是可用于函数、类型名。 |
R | reserved | 保留,不可用于任何对象名称。 |
关键字 | 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分布键 | 不支持 | 支持 |