すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:AnalyticDB for PostgreSQL V6.0とV7.0の互換性の比較

最終更新日:Nov 19, 2024

AnalyticDB for PostgreSQL V6.0AnalyticDB 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 UNKNOWN
    • CREATE 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_exttable

      AnalyticDB for PostgreSQL V7.0は、externalforeignという名前のシステムテーブルをpg_foreign_tableテーブルに結合します。 pg_foreign_tableテーブルで、元のexternalテーブルのserver列の名前がgp_exttable_serverに変更され、外部テーブルの関連プロパティがftoptions列に書き込まれます。

    • pg_パーティション

    • pg_partition_encoding

    • pg_partition_rule

      gp_partition_templateおよびpg_partition_tableテーブルは、パーティションテーブルに関連するシステムテーブルとして使用されます。

  • パーティションテーブルに関連する追加されたシステムテーブル:

    • gp_partition_template

      gp_partition_templateテーブルは、パーティションテーブルの各パーティションレベルのテンプレートを定義します。 次の表に、gp_partition_templateテーブルの構造を示します。

      列名

      タイプ

      説明

      rerid

      oid

      親パーティション分割テーブルのOID。

      level

      int16

      パーティションテーブル内のパーティションのレベル。

      テンプレート

      pg_node_tree

      テンプレート構造。

    • pg_partitionated_table

      pg_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.0AnalyticDB 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_receivexlogpg_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インスタンス間のデータ移行」をご参照ください。