全部產品
Search
文件中心

:4.3版本與6.0版本相容性注意事項

更新時間:Feb 05, 2024

本文介紹了雲原生資料倉儲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分布鍵

不支援

支援