Babelfish での T-SQL の違い - Amazon Aurora

Babelfish での T-SQL の違い

以下に、Babelfish の現在のリリースでサポートされている T-SQL 機能の表と SQL Server 用との動作の違いに関する注意事項を示します。

さまざまなバージョンのサポートの詳細については、「バージョンごとに Babelfish でサポートされている機能」を参照してください。現在サポートされていない機能の詳細については、「Babelfish でサポートされていない機能」を参照してください。

Babelfish は、Aurora PostgreSQL 互換エディションで使用可能です。Babelfish のリリースの詳細については、「Aurora PostgreSQL リリースノート」を参照してください。

機能または構文 動作または違いの説明
\ (行継続文字) 文字および 16 進数の文字列の行継続文字 (改行の前のバックスラッシュ) は現在サポートされていません。文字列の場合、バックスラッシュ改行は文字列内の文字として解釈されます。16 進数の文字列の場合、バックスラッシュ改行は構文エラーになります。

@@バージョン

@@version によって返される値の形式は SQL Server によって返される値とは若干異なります。@@version のフォーマットによっては、コードが正しく動作しないことがあります。

集計関数

集計関数は部分的にサポートされています (AVG、COUNT、COUNT_BIG、GROUPING、MAX、MIN、STRING_AGG、SUM がサポートされています)。サポートされていない集計関数のリストについては、サポートされていない関数 を参照してください。

ALTER TABLE

単一の列または制約の追加または削除のみをサポートします。

ALTER TABLE..ALTER COLUMN

NULL と NOT NULL は現在指定できません。カラムのヌル可能性を変更するには、PostgreSQL ステートメント ALTER TABLE..{SET|DROP} NOT NULL を使用してください。

列エイリアスのない空白の列名

sqlcmdpsql ユーティリティは、空白の名前を持つ列を異なる方法で処理します:

  • SQL Server sqlcmd は空の列名を返します。

  • PostgreSQL psql は生成されたカラム名を返します。

CHECKSUM 関数

Babelfish と SQL Server は CHECKSUM 関数で異なるハッシュアルゴリズムを使用しています。その結果、Babelfish の CHECKSUM 関数によって生成されるハッシュ値は、SQL Server の CHECKSUM 関数によって生成されるハッシュ値と異なる場合があります。

列のデフォルト

列のデフォルトを作成する場合、制約名は無視されます。列のデフォルトを削除するには、次の構文を使用します: ALTER TABLE...ALTER COLUMN..DROP DEFAULT...

Constraint_name

SQL Server では、テーブルが属するスキーマ内で制約名を一意にする必要があります。ただし、Babelfish では、これは PRIMARY KEY と UNIQUE の制約にのみ適用されます。その他のタイプの制約は、この制限の対象ではありません。

制約

PostgreSQL は、個々の制約のオンとオフをサポートしていません。ステートメントは無視され、警告が表示されます。

IGNORE_DUP_KEY による制約

制約は、このプロパティなしで作成されます。

サーバーロールの作成、変更、削除

ALTER SERVER ROLE は、sysadmin のみでサポートされています。その他の構文はサポートされていません。

Babelfish の T-SQL ユーザーは、ログイン (サーバープリンシパル)、データベース、およびデータベースユーザー (データベースプリンシパル) の概念について、SQL Server と類似の経験をします。

CREATE、ALTER LOGIN 句は、限定された構文でサポートされています

ログイン作成..。パスワード句、...DEFAULT_DATABASE 句、および ...DEFAULT_LANGUAGE 句がサポートされています。ログイン変更..。PASSWORD 句はサポートされていますが、ALTER LOGIN..。OLD_PASSWORD 句はサポートされていません。パスワードを変更できるのは、sysadmin メンバーのログインのみです。

大文字と小文字を区別する照合順序を作成

CREATE DATABASE ステートメントでは、大文字と小文字を区別する照合はサポートされていません。

CREATE DATABASE キーワードと句

COLLATE および CONTAINMENT=NONE 以外のオプションはサポートされていません。COLLATE 句は受け入れられ、常に babelfishpg_tsql.server_collation_name の値に設定されます。

CREATE SCHEMA... サポート句

CREATE SCHEMA コマンドを使用して、空のスキーマを作成できます。追加のコマンドを使用して、スキーマオブジェクトを作成します。

データベース ID の値は Babelfish で異なります

マスターデータベースと tempdb データベースは、データベース ID 1 および 2 にはなりません。

FORMAT 日付型関数は、次の制限付きでサポートされています

1 文字の午前/午後はサポートされていません。

SQL サーバーでは、「yyy」形式は、1000 年を超える年では 4 桁を返しますが、それ以外の場合は 3 桁しか返しません。

「g」および「R」形式はサポートされていません

「Vi-VN」ロケールの翻訳は少し異なります。

63 文字を超える識別子

PostgreSQL は、最大 63 文字の識別子をサポートしています。Babelfish は 63 文字を超える識別子を、元の名前のハッシュを含んだ名前に変換します。例えば、「AB(ABC1234567890123456789012345678901234567890123456789012345678901234567890」として作成された表は、「ABC123456789012345678901234567890123456789012345678901234567890」に変換される可能性があります。

IDENTITY 列のサポート

IDENTITY 列は tinyintsmallintintbigintnumeric、 およびdecimal のデータ型でサポートされています。

SQL Server は、IDENTITY 列で numericdecimal のデータ型の精度を 38 か所までサポートしています。

PostgreSQL Server は、IDENTITY 列で numericdecimal のデータ型の精度を 19 か所までサポートしています。

IGNORE_DUP_KEY のインデックス

IGNORE_DUP_KEY を含むインデックスを作成する構文は、このプロパティを省略したかのようにインデックスを作成します。

32 列を超えるインデックス

インデックスには 32 個を超える列を含めることはできません。含まれるインデックス列は PostgreSQL では最大までカウントされますが、SQL Server ではカウントされません。

インデックス (クラスター)

クラスター化したインデックスは、NONCLUSTERED が指定されているかのように作成されます。

インデックス句

次の句は無視されます: FILLFACTOR、ALLOW_PAGE_LOCKS、ALLOW_ROW_LOCKS、PAD_INDEX、STATISTICS_NORECOMPUTE、OPTIMIZE_FOR_SEQUENTIAL_KEY、SORT_IN_TEMPDB、DROP_EXISTING、ONLINE、COMPRESSION_DELAY、MAXDOP、および DATA_COMPRESSION

JSON サポート

名前と値のペアの順序は保証されていません。ただし、配列タイプは影響を受けません。

LOGIN オブジェクト

PASSWORD、DEFAULT_DATABASE、DEFAULT_LANGUAGE、ENABLE、DISABLE を除く LOGIN オブジェクトのすべてのオプションがサポートされていません。

NEWSEQUENTIALID 関数

NEWID として実装されたシーケンシャル動作は保証されません。NEWSEQUENTIALID を呼び出す際、PostgreSQL は新しい GUID 値を生成します。

OUTPUT 句は、以下の制限付きでサポートされています。

同じ DML クエリでは、OUTPUT と OUTPUT INTO はサポートされていません。OUTPUT 句内の UPDATE または DELETE オペレーションのターゲット以外のテーブルへの参照はサポートされていません。OUTPUT… DELETED *、INSERTED * は同じクエリではサポートされていません。

プロシージャまたは関数パラメータの制限

Babelfish は、プロシージャまたは関数に対して最大 100 個のパラメータをサポートしています。

ROWGUIDCOL

現在のところ、この句は無視されます。参照するクエリ$GUIDGOL構文エラーを引き起こします。

SEQUENCE オブジェクトサポート

SEQUENCE オブジェクトは、tinyint、smallint、int、bigint、numeric、および decimal のデータ型でサポートされています。

Aurora PostgreSQL は、SEQUENCE 内の数値および小数点のデータ型の精度を 19 桁までサポートしています。

サーバーレベルのロール

sysadmin サーバーレベルのロールがサポートされています。その他のサーバーレベルのロール (sysadmin 以外) はサポートされていません。

db_owner 以外のデータベースレベルのロール

db_owner データベースレベルのロールとユーザー定義のデータベースレベルのロールがサポートされています。その他のデータベースレベルのロール (db_owner 以外) はサポートされていません。

SQL キーワード SPARSE

キーワード SPARSE は受け入れられ、無視されます。

SQL キーワード句 ON filegroup

現在のところ、この句は無視されます。

インデックスと制約の SQL キーワード CLUSTEREDNONCLUSTERED

Babelfish は CLUSTEREDNONCLUSTERED キーワードを受け入れ、無視します。

sysdatabases.cmptlevel

sysdatabases.cmptlevel は常に 120 に設定されます。

tempdb は再起動時に再初期化されません

tempdb で作成された永続オブジェクト (テーブルやプロシージャなど) は、データベースを再起動しても削除されません。

TEXTIMAGE_ON ファイルグループ

Babelfish は TEXTIMAGE_ON filegroup 句を無視します。

時間精度

Babelfish は 少数秒 で 6 桁の精度をサポートします。この動作では、悪影響は予想されません。

トランザクション分離レベル

READUNCOMMITTED は READCOMMITTED と同じように扱われます

仮想計算列 (非永続的)

仮想計算列は永続として作成されます。

WITHOUT SCHEMABINDING 句

この句は、関数、プロシージャ、トリガー、またはビューでサポートされていません。オブジェクトは作成されますが、WITH SCHEMABINDING が指定されているかのようになります。