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