AnalyticDB for PostgreSQL V6.0とAnalyticDB for PostgreSQL V7.0は互いに完全に互換性がありません。 AnalyticDB for PostgreSQLインスタンスをV6.0からV7.0にアップグレードする場合は、2つのバージョンの互換性の比較に注意してください。
データ型
AnalyticDB for PostgreSQL V7.0は、TIMESTAMPなどの標準SQL型に置き換えられる次のデータ型を削除します。
ABSTIME
リアルタイム
TINTERVAL
タイムインターバル
AnalyticDB for PostgreSQL V7.0はUNKNOWNキーワードを予約しますが、UNKNOWNタイプはサポートしません。
AnalyticDB for PostgreSQL V7.0は、列のデータ型としてUNKNOWN型をサポートしていません。
--- If you specify UNKNOWN as the data type of columns, an error is returned. CREATE TABLE test(a INT, b UNKNOWN); ERROR: COLUMN "b" has pseudo-type UNKNOWNCREATE TABLE AS SELECT (CTAS) ステートメントで文字列定数を指定した場合、AnalyticDB for PostgreSQL V7.0はデータ型をUNKNOWNとして認識しなくなりますが、最近傍ルールに基づいてデータ型をTEXTまたは最も近い列のデータ型に自動的に変換します。
--- An ordinary string constant or NULL used in the CTAS statement is recognized as the UNKNOWN type in AnalyticDB for PostgreSQL V6.0 but is automatically converted into the TEXT type in AnalyticDB for PostgreSQL V7.0. CREATE TABLE test AS SELECT 1 AS a, NULL AS b; TABLE "public.test" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- a | integer | | | b | text | | | Distributed randomly --- If a UNION clause is used in the CTAS statement, the UNKNOWN type is converted into the data type of the nearest column. CREATE TABLE test AS SELECT 1::INT UNION SELECT NULL; TABLE "public.test" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- int4 | integer | | | Distributed randomly特定の位置のために、文字列定数が最近傍ルールに基づいて変換されるデータ型を取得できない場合、文字列定数は自動的にTEXT型に変換されます。 この場合、テキスト関連のエラーが返されます。
CREATE TABLE test(a INT); --- The string constant in the inner SELECT statement cannot find the INT type in the test table due to the nested SELECT statements. INSERT INTO test SELECT a FROM (SELECT '1' AS a) t; ERROR: COLUMN "a" IS OF type INTEGER but expression IS OF type text特定の関数に無効なパラメーターを指定すると、文字列定数に対してUNKNOWN型エラーが返される場合があります。
--- Input parameters of the string_agg() function support only the following types: string_agg(text,text) string_agg(bytea,bytea) --- If you specify a different type and a string constant as input parameters, an UNKNOWN type error may be returned. CREATE TABLE test(a INT, b INT); SELECT a, string_agg(b,',') FROM test GROUP BY a; ERROR: FUNCTION string_agg(INTEGER, UNKNOWN) does NOT exist
説明AnalyticDB for PostgreSQL V6.3.11は、AnalyticDB for PostgreSQL V7.0がUNKNOWN型をサポートしているのと同じ方法で、UNKNOWN型をサポートしていません。 AnalyticDB for PostgreSQL V6.6.2では、
adbpg_enable_resolve_unknownsパラメーターを使用して、UNKNOWN型をサポートするかどうかを判断します。 デフォルトでは、UNKNOWNタイプはサポートされていません。
SQL 構文
ALTER TABLEの
比較... ADD PRIMARY KEYステートメント:AnalyticDB for PostgreSQL V7.0で、ALTER TABLEを実行する
と... ADD PRIMARY KEYステートメントを使用してNOT NULLプロパティを持つ主キー列を主テーブルに追加すると、NOT NULLプロパティが子テーブルの主キー列に追加されます。AnalyticDB for PostgreSQL V6.0で、ALTER TABLEを実行する
と... ADD PRIMARY KEYステートメントを使用して、NOT NULLプロパティを持つ主キー列を主テーブルに追加します。NOT NULLプロパティは、子テーブルの主キー列には追加されません。
CREATE FUNCTIONステートメントの比較:AnalyticDB for PostgreSQL V7.0では、CREATE FUNCTIONステートメントにWITH句が含まれていません。
AnalyticDB for PostgreSQL V6.0では、CREATE FUNCTIONステートメントにWITH句が含まれています。
オブジェクト識別子 (OID) 列の比較:
AnalyticDB for PostgreSQL V7.0では、システムテーブルに通常のOID列が含まれています。
AnalyticDB for PostgreSQL V6.0では、システムテーブルに非表示のOID列が含まれています。 AnalyticDB for PostgreSQL V6.0インスタンスにテーブルを作成する場合、WITH OIDS句を使用して非表示のOID列を指定できます。 この機能はAnalyticDB for PostgreSQL V7.0では無効になっています。 AnalyticDB for PostgreSQL V7.0では、列をOID型として明示的に宣言できます。 OID列を持つテーブルを作成するには、別のcreate tableステートメントを使用する必要があります。
システムテーブル
特定のシステムテーブルは、AnalyticDB for PostgreSQL V7.0で変更されます。 ビジネスロジックがシステムテーブルを参照する場合は、エラーを防ぐためにテーブルを変更する必要があります。
削除されたシステムテーブル:
pg_exttableAnalyticDB for PostgreSQL V7.0は、
externalとforeignという名前のシステムテーブルをpg_foreign_tableテーブルに結合します。 pg_foreign_tableテーブルで、元のexternalテーブルのserver列の名前がgp_exttable_serverに変更され、外部テーブルの関連プロパティがftoptions列に書き込まれます。pg_パーティションpg_partition_encodingpg_partition_rulegp_partition_templateおよびpg_partition_tableテーブルは、パーティションテーブルに関連するシステムテーブルとして使用されます。
パーティションテーブルに関連する追加されたシステムテーブル:
gp_partition_templategp_partition_templateテーブルは、パーティションテーブルの各パーティションレベルのテンプレートを定義します。 次の表に、gp_partition_templateテーブルの構造を示します。列名
タイプ
説明
rerid
oid
親パーティション分割テーブルのOID。
level
int16
パーティションテーブル内のパーティションのレベル。
テンプレート
pg_node_tree
テンプレート構造。
pg_partitionated_tablepg_partition_tableテーブルには、テーブルのパーティション分割方法に関する情報が格納されます。 pg_partitioned_tableテーブルの構造を次の表に示します。列名
タイプ
参照
説明
partrelid
oid
pg_classを使用します。oid
パーティションテーブルのpg_classエントリのOID。
partstrat
char
なし
パーティション分割戦略。 有効な値:
h: ハッシュ分割。
l: リスト分割。
r: 範囲分割。
partnatts
int2
なし
パーティションキーの列数。
partdepfid
oid
pg_classを使用します。oid
パーティションテーブルのデフォルトパーティションのpg_classエントリのOID。 パーティションテーブルにデフォルトのパーティションがない場合、列の値は0です。
partattrs
int2vector
pg_属性attnum
どのテーブル列がパーティションキーの一部であるかを示すpartnatts値の配列。 たとえば、
1 3の値は、1番目と3番目の列がパーティションキーを形成することを示します。 この配列の値0は、対応するパーティションキー列が単純な列参照ではなく式であることを示します。partclass
oidvector
pg_opclass。oid
パーティションキーの各列で使用する演算子クラスのOID。 詳細については、「pg_opclass」をご参照ください。
partcollation
oidvector
pg_opclass。oid
パーティションキーの各列のパーティション分割に使用する照合順序のOID。 列が照合可能なデータ型でない場合、列の値は0です。
partexprs
pg_node_tree
なし
単純な列参照ではないパーティションキー列の
nodeToString()関数の式ツリー。 列はリストです。 すべてのパーティションキー列が単純列参照の場合、列はnullです。
変更されたシステムテーブル:
システムテーブル
変更の説明
pg_attribute
atthasmissing列は、列に値が欠落しているかどうかを示すために追加されます。 有効な値:
true: 列に値がなく、NULL値を含めることができます。false: 列に欠落している値はなく、NULL値を含めることはできません。
attidentity列は、列が識別子列として定義されているかどうかを示すために追加されます。 有効な値:
'a': 列は識別子列であり、値は常に列に対して生成されます。「d」: 列は識別子列であり、シーケンスまたは別のメカニズムを使用して列の値が自動的に生成されます。''(ゼロバイト): この列は識別子列ではありません。
attgenerated列は、列が生成された列であるかどうかを示すために追加されます。 有効な値:
's': 列は生成された列で、列の値はSTOREDです。''(ゼロバイト): 生成された列ではありません。
pg_class
テーブルの物理ストレージモードを示すrelstorage列が削除されます。 AnalyticDB for PostgreSQL V7.0では、外部テーブルのrelstorage列がrelkind列に置き換えられ、relkind列の値が
'r'から'f'に変更されます。テーブルの各行のOIDを生成するかどうかを示すrelhasoids列は削除されます。 非表示のOID列は、AnalyticDB for PostgreSQL V7.0で削除されます。
テーブルに主キーインデックスがあるかどうかを示すrelhaskey列が削除されます。 AnalyticDB for PostgreSQL V7.0では、アプリケーションのデータテーブルにpg_indexシステムテーブルのプライマリキーインデックスがあるかどうかを確認できます。
relrowsecurity列は、テーブルに対して行レベルセキュリティ (RLS) が有効になっているかどうかを示すために追加されます。 有効な値:
true: テーブルに対してRLSが有効になっており、セキュリティポリシーをテーブルに適用できます。false: テーブルのRLSは無効です。 デフォルトでは、すべてのユーザーがテーブルのすべてのデータにアクセスできます。
テーブルに対してRLSが強制的に有効になっているかどうかを確認するために、felforcerowsecurity列が追加されます。 有効なRLSがテーブル所有者に適用される場合、felforcerowsecurity列の値はtrueです。
relispartition列は、テーブルがパーティションテーブルであるかどうかを示すために追加されます。 有効な値:
true: テーブルはパーティションテーブルのパーティションです。false: テーブルはパーティションテーブルではないか、パーティションテーブルの親テーブルです。
relrewrite列は、テーブルがDDL操作の書き換えルールを定義しているかどうかを示すために追加されます。 有効な値:
true: テーブルは、DDL操作の書き換えルールを定義します。false: テーブルはDDL操作の書き換えルールを定義していません。
pg_node_tree型のrelpartbound列が追加され、パーティション境界の内部表現が示されます。
pg_index
indnkeyatts列は、インデックス内のキー列の数を示すために追加されます。 AnalyticDB for PostgreSQL V7.0では、インデックスを作成するためのステートメントにINCLUDE句が含まれています。 これにより、インデックスなしの列をリーフノードに追加して検索を容易にすることができます。
pg_proc
protransform列の名前はprosupportに変更されます。 prosupport列で指定された関数は、対応する行の関数よりも簡単です。
関数が集計関数であるかどうかを示すproisagg列が削除されます。
関数がウィンドウ関数であるかどうかを示すproiswindow列が削除されます。
prokind列は、関数の型を示すために追加されます。 有効な値:
f: 共通関数。
p: ストアドプロシージャ。
a: 集計関数。
w: ウィンドウ関数。
proparallel列は、関数を並列モードで安全に実行できるかどうかを示すために追加されます。 有効な値:
s: 関数は、制限なしに並列モードで安全に実行できます。
r: 関数は並列モードで実行できますが、並列グループのリーダーのみが実行できます。
u: 関数は並列モードで安全に実行できず、SQL文にそのような関数が存在すると、シリアル実行プランが強制されます。
protrftypes列は、適用する必要があるデータ型変換ルールのOIDを格納するために追加されます。
pg_statistic
stacoll列は、統計の収集方法を示すために追加されます。 有効な値:
N: 照合は、スロットNに格納された統計をエクスポートするために使用されます。たとえば、照合可能な列のヒストグラムスロットは、データのソート順序を定義する照合を示します。
0: 統計を収集できません。
拡張機能
次の表に、AnalyticDB for PostgreSQL V7.0で一時的に使用できない可能性のある拡張機能を示します。
エクステンション | 説明 |
adbpg_desensitation | SQL文のマスキングを実行します。 |
adbpg_hardware_bench | ハードウェアの適合性を評価します。 |
address_standardizer | アドレスをグループ要素に解決します。 ほとんどの場合、この拡張機能はジオコーディングされたアドレス標準化をサポートするために使用されます。 |
address_standardizer_data_us | アメリカのアドレス標準化と解決の機能を提供します。 |
auto_partition | 日付によってパーティションを管理します。 |
diskquota | ディスクのクォータを管理します。 |
fastann | ベクトルデータベースエンジンを提供します。 |
hyjal_pb_formatter | hyjal protobufデータを読み取ることができます。 |
マドリブ | スケーラブルなデータベース内分析用のオープンソースライブラリを提供します。 |
morton_code | モートンエンコーダを提供します。 |
multi_master | マルチマスター機能をサポートするユーザー定義関数 (UDF) を提供します。 |
マルチコーン | カスタム外部データソースを照会します。 Multicorn拡張機能を使用するには、Pythonプログラミングに関する知識が必要です。 |
open_analytic | 非構造化データを分析します。 |
oss_ext | Object Storage Service (OSS) 外部テーブルからデータを読み書きできるプロトコルを提供します。 この拡張機能はAnalyticDB for PostgreSQL V7.0ではサポートされなくなり、oss_fdw拡張機能に置き換えられます。 |
PL/Java | JavaコードをPostgreSQLデータベースに埋め込むことができます。 |
PL/Python | PythonコードをPostgreSQLデータベースに埋め込むことができます。 この拡張機能はAnalyticDB for PostgreSQL V7.0ではサポートされなくなり、PL/Python3u拡張機能に置き換えられます。 |
PL/Python2u | Python 2を使用して、ストアドプロシージャ、トリガー、および関数をPostgreSQLデータベースに記述できます。 この拡張機能はAnalyticDB for PostgreSQL V7.0ではサポートされなくなり、PL/Python3u拡張機能に置き換えられます。 |
redis_fdw | Redisデータにアクセスできるように、外部データラッパー (FDW) を提供します。 |
キーワード
AnalyticDB for PostgreSQL V7.0は、特定のキーワードを追加、変更、および削除します。 データベースオブジェクトの名前をキーワードと同じにすることはできません。
次のステートメントを実行して、AnalyticDB for PostgreSQL V6.0およびV7.0のキーワードとその意味を照会できます。
SELECT * FROM pg_get_keywords();次の表に、AnalyticDB for PostgreSQL V7.0のキーワードカテゴリを示します。
カテゴリコード | 説明 |
U | 予約なし このカテゴリのキーワードは、ビュー、テーブル、関数、インデックス、フィールド、およびタイプを含むすべてのオブジェクトの名前として使用できます。 |
C | 予約なし このカテゴリのキーワードは、関数とタイプを除いて、オブジェクトの名前として使用できます。 |
T | 予約済みです。 このカテゴリのキーワードは、関数と型を除いて、オブジェクトの名前として使用することはできません。 |
R | 予約済みです。 このカテゴリのキーワードは、オブジェクトの名前として使用できません。 |
次の表に、AnalyticDB for PostgreSQL V7.0とAnalyticDB for PostgreSQL V6.0の異なるカテゴリに属するキーワードを示します。
キーワード | AnalyticDB for PostgreSQL V6.0 | AnalyticDB for PostgreSQL V7.0 |
access_key_id | 未予約 | 非該当 |
添付 | 非該当 | 未予約 |
呼び出し | 非該当 | 未予約 |
列 | 非該当 | 未予約 |
coordinator | 非該当 | 未予約 |
cube | unreserved (関数またはタイプ名にすることはできません) | 未予約 |
depends | 非該当 | 未予約 |
detach | 非該当 | 未予約 |
endpoint | 非該当 | 未予約 |
生成された | 非該当 | 未予約 |
グループ | 非該当 | 未予約 |
インポート | 非該当 | 未予約 |
を含む | 非該当 | 未予約 |
増分 | 未予約 | 非該当 |
initplan | 非該当 | 未予約 |
JSON | 未予約 | 非該当 |
jsonline | 未予約 | 非該当 |
lc_collate | 未予約 | 非該当 |
lc_ctype | 未予約 | 非該当 |
図書館 | 未予約 | 非該当 |
ロック | 非該当 | 未予約 |
ログ | 非該当 | 未予約 |
マニフェスト | 未予約 | 非該当 |
マージ | 未予約 | 非該当 |
method | 非該当 | 未予約 |
マルチソート | 未予約 | 非該当 |
new | 非該当 | 未予約 |
old | 非該当 | 未予約 |
orc | 未予約 | 非該当 |
オーバーライド | 非該当 | 未予約 |
永続的に | 非該当 | 未予約 |
寄木細工 | 未予約 | 非該当 |
policy | 非該当 | 未予約 |
プロシージャ | 非該当 | 未予約 |
参照 | 非該当 | 未予約 |
取得 | 非該当 | 未予約 |
rollup | unreserved (関数またはタイプ名にすることはできません) | 未予約 |
ルーチン | 非該当 | 未予約 |
ルーチン | 非該当 | 未予約 |
スキーマ | 非該当 | 未予約 |
secret_access_key | 未予約 | 非該当 |
セット | unreserved (関数またはタイプ名にすることはできません) | 未予約 |
skip_ao_aux_table | 未予約 | 非該当 |
skip | 非該当 | 未予約 |
sort | 未予約 | 非該当 |
ソート済み | 未予約 | 非該当 |
storage_cold | 未予約 | 非該当 |
storage_hot | 未予約 | 非該当 |
格納済み | 非該当 | 未予約 |
サポート | 非該当 | 未予約 |
同期 | 未予約 | 非該当 |
tablesample | 非該当 | reserved (関数またはタイプ名にすることはできません) |
変換 | 非該当 | 未予約 |
ttl | 未予約 | 非該当 |
アンロード | 未予約 | 非該当 |
ソートされていない | 未予約 | 非該当 |
xmlnamespaces xmlnamespaces | 非該当 | unreserved (関数またはタイプ名にすることはできません) |
xmltable | 非該当 | unreserved (関数またはタイプ名にすることはできません) |
zorder | 予約済み | 非該当 |
関数関連の比較
AnalyticDB for PostgreSQL V7.0では、先行ログディレクトリ
pg_xlogの名前がpg_walに変更され、トランザクションステータスディレクトリpg_clogの名前がpg_xactに変更されます。 SQL関数、ツール、およびオプションで参照されるxlog文字列はすべてwalに名前が変更されます。 たとえば、pg_switch_xlog()はpg_switch_wal()に名前が変更され、pg_receivexlogはpg_receivewalに名前が変更され、-- xlogdirは-- waldirに名前が変更されます。AnalyticDB for PostgreSQL V7.0では、SQLスタイルの
substring()関数が標準に準拠したgreediness動作に変更されています。 パターンが複数の方法でマッチングされ得る場合、最初のサブパターンは、最大ではなく、可能な最小量のテキストにマッチングするものとして扱われる。 たとえば、%#"aa *#" %などのパターンは、最後のグループではなく、入力パラメーターからaの最初のグループを選択します。
その他の比較
セキュリティを向上させるために、AnalyticDB for PostgreSQL V7.0はSHA256アルゴリズムを使用してデータベースパスワードを暗号化します。 SHA256アルゴリズムは、AnalyticDB for PostgreSQL V6.0のデフォルトのMD5アルゴリズムよりも安全です。 AnalyticDB for PostgreSQL V6.0からAnalyticDB for PostgreSQL V7.0にアップグレードするには、データ移行機能を使用して、2つのバージョンのインスタンス間でデータを移行できます。 AnalyticDB for PostgreSQL V7.0インスタンスにデータを移行した後、データベースのパスワードをリセットします。 詳細については、「AnalyticDB For PostgreSQLインスタンス間のデータ移行」をご参照ください。