Babelfish 中的 T-SQL 差异 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Babelfish 中的 T-SQL 差异

下面,您可以找到当前版本 Babelfish 支持的 T-SQL 功能表,其中包含一些关于行为与 SQL Server 行为差异的注释。

有关各种版本支持的更多信息,请参阅Babelfish 的各个版本支持的功能。有关当前不支持功能的信息,请参阅Babelfish 不支持的功能

Babelfish 可用于 Aurora PostgreSQL 兼容版。有关 Babelfish 版本的更多信息,请参阅 Aurora PostgreSQL 版本注释

功能或语法 行为或差异的描述
\(行延续字符) 当前不支持字符串和十六进制字符串的行延续字符(换行符前的反斜杠)。对于字符串,反斜杠换行符被解释为字符串中的字符。对于十六进制字符串,反斜杠换行符会导致语法错误。

@@version

@@version 返回的值的格式与 SQL Server 返回的值略有不同。如果您的代码取决于 @@version 的格式化,可能无法正常工作。

聚合函数

部分支持聚合函数(支持 AVG、COUNT、COUNT_BIG、GROUPING、MAX、MIN、STRING_AGG 和 SUM)。有关不支持聚合函数的列表,请参阅不支持的函数

ALTER TABLE

仅支持添加或删除单个列或约束。

ALTER TABLE..ALTER COLUMN

目前无法指定 NULL 和 NOT NULL。要更改列是否可为 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...

约束

PostgreSQL 不支持打开和关闭单个约束条件。将忽略语句,并发出警告。

使用 DESC(降序)列创建的约束

约束是使用 ASC(升序)列创建的。

具有 IGNORE_DUP_KEY 的约束

不使用此属性创建约束。

CREATE、ALTER、DROP SERVER ROLE

ALTER SERVER ROLE 仅支持 sysadmin。不支持所有其他语法。

对于登录(服务器主体)、数据库和数据库用户(数据库主体)的概念,Babelfish 中的 T-SQL 用户的体验类似于 SQL Server。

CREATE、ALTER LOGIN 子句支持有限的语法

支持 CREATE LOGIN... PASSWORD 子句、...DEFAULT_DATABASE 子句和 ...DEFAULT_LANGUAGE 子句。支持 ALTER LOGIN... PASSWORD 子句,但 ALTER LOGIN... OLD_PASSWORD 子句不受支持。只有系统管理员成员的登录名才能修改密码。

CREATE DATABASE 区分大小写的排序规则

CREATE DATABASE 语句不支持区分大小写的排序规则。

CREATE DATABASE 关键字和子句

不支持 COLLATE 和 CONTAINMENT=NONE 以外的选项。COLLATE 子句被接受并且始终设置为 babelfishpg_tsql.server_collation_name 的值。

CREATE SCHEMA... 支持子句

您可以使用 CREATE SCHEMA 命令创建空架构。使用其他命令创建架构对象。

Babelfish 上的数据库 ID 值不同

主数据库和 tempdb 数据库将不是数据库 ID 1 和 2。

支持 TO_CHAR 日期类型格式函数,但存在以下限制

不支持单字符子午线。

对于大于 1000 的年份,SQL Server 中的“yyy”格式返回 4 位数,但对于其他年份,只返回 3 位数字。

不支持“g”和“R”格式

“vi-VN”区域设置翻译略有不同。

超过 63 个字符的标识符

PostgreSQL 最多为标识符支持 63 个字符。Babelfish 将长度超过 63 个字符的标识符转换为包含原名哈希的名称。例如,创建为“AB(ABC1234567890123456789012345678901234567890123456789012345678901234567890”的表可能转换为“ABC123456789012345678901234567890123456789012345678901234567890”。

IDENTITY 列支持

IDENTITY 列支持数据类型 tinyintsmallintintbigintnumericdecimal

SQL Server 为 IDENTITY 列中的数据类型 numericdecimal 支持的精度达到 38 位。

PostgreSQL 为 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 对象

支持 LOGIN 对象的所有选项,但以下各项除外:PASSWORD、DEFAULT_DATABASE、ENABLE、DISABLE。

NEWSEQUENTIALID 函数

作为 NEWID 实施;不保证顺序行为。调用 NEWSEQUENTIALID 时,PostgreSQL 会生成一个新的 GUID 值。

支持 OUTPUT 子句,但存在以下限制

同一个 DML 查询中不支持 OUTPUT 和 OUTPUT INTO。不支持在 OUTPUT 子句中对 UPDATE 或 DELETE 操作的非目标表进行引用。OUTPUT... DELETED *、INSERTED * 在同一个查询中不受支持。

过程或函数参数限制

Babelfish 最多支持 100 个过程或函数的参数。

ROWGUIDCOL

此子句当前被忽略。引用 $GUIDGOL 的查询导致语法错误。

SEQUENCE 对象支持

数据类型 tinyint、smallint、int、bigint、numeric 和 decimal 支持 SEQUENCE 对象。

对于 SEQUENCE 中的数据类型 numeric 和 decimal,Aurora PostgreSQL 支持的精度达到 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 位数的精度。预计这种行为不会产生负面影响。

事务隔离级别

以与 READCOMMITTED 相同的方式对待 READUNCOMMITTED。

虚拟计算列(非持久性)

虚拟计算列是作为永久列创建的。

无 SCHEMABINDING 子句

函数、过程、触发器或视图不支持此子句。已创建对象,但仿佛指定了 WITH SCHEMABINDING。