Diferencias de T-SQL en Babelfish - Amazon Aurora

Diferencias de T-SQL en Babelfish

A continuación, encontrará una tabla de la funcionalidad de T-SQL compatible en la versión actual de Babelfish con algunas notas sobre las diferencias en el comportamiento con respecto al de SQL Server.

Para obtener más información acerca de la compatibilidad con versiones secundarias, consulte Funcionalidades compatibles con Babelfish por versión. Para obtener información acerca de las características no compatibles actualmente, consulte Funcionalidades no compatibles con Babelfish.

Babelfish está disponible con Aurora PostgreSQL-Compatible Edition. Para obtener más información sobre las versiones de Babelfish, consulte las Notas de la versión de Aurora PostgreSQL.

Funcionalidad o sintaxis Descripción del comportamiento o de la diferencia
\ (carácter de continuación de línea) El carácter de continuación de línea (barra invertida antes de una nueva línea) para cadenas de caracteres y hexadecimales no es actualmente compatible. Para las cadenas de caracteres, la barra invertida de nueva línea se interpreta como caracteres en la cadena. Para las cadenas hexadecimales, la barra invertida de nueva línea da como resultado un error de sintaxis.

@@version

El formato del valor devuelto por @@version es ligeramente diferente del valor devuelto por SQL Server. Es posible que el código no funcione correctamente si depende del formato de @@version.

Funciones de agregación

Las funciones agregadas con parcialmente compatibles (se admiten AVG, COUNT, COUNT_BIG, GROUPING, MAX, MIN, STRING_AGG y SUM). Para ver una lista de las funciones agregadas no admitidas, consulte Funciones que no son compatibles.

ALTER TABLE

Admite la adición o eliminación de una sola columna o restricción.

ALTER TABLE..ALTER COLUMN

Actualmente no se pueden especificar NULL y NOT NULL. Para cambiar la nulabilidad de una columna, utilice la instrucción postgreSQL ALTER TABLE..{SET|DROP} NOT NULL.

Nombres de columna en blanco sin alias de columna

Las utilidades sqlcmd y psql gestionan columnas con nombres en blanco de manera diferente:

  • sqlcmd de SQL Server devuelve un nombre de columna en blanco.

  • psql de PostgreSQL devuelve un nombre de columna generado.

Función CHECKSUM

Babelfish y SQL Server utilizan diferentes algoritmos de hash para la función CHECKSUM. Como resultado, los valores hash generados por la función CHECKSUM en Babelfish pueden ser diferentes de los generados por la función CHECKSUM en SQL Server.

Columna predeterminada

Al crear un valor predeterminado de columna, se ignora el nombre de la restricción. Para eliminar un valor predeterminado de columna, utilice la sintaxis siguiente: ALTER TABLE...ALTER COLUMN..DROP DEFAULT...

Constraint_name

En SQL Server, los nombres de las restricciones deben ser únicos dentro del esquema al que pertenece la tabla. Sin embargo, en Babelfish, esto solo se aplica a las restricciones PRIMARY KEY y UNIQUE. Otros tipos de restricciones no están sujetos a esta limitación.

Restricciones

PostgreSQL no admite activar y desactivar restricciones individuales. La instrucción se omite y se produce una advertencia.

Restricciones con IGNORE_DUP_KEY

Las restricciones se crean sin esta propiedad.

CREATE, ALTER, DROP SERVER ROLE

ALTER SERVER ROLE solo se admite para sysadmin. No se admite el resto de sintaxis.

El usuario de T-SQL de Babelfish tiene una experiencia similar a SQL Server para los conceptos de inicio de sesión (entidad principal de servidor), base de datos y usuario de base de datos (entidad principal de base de datos).

Las cláusulas CREATE, ALTER LOGIN se admiten con sintaxis limitada

CREATE LOGIN... Se admiten las cláusulas PASSWORD, ...DEFAULT_DATABASE y ... DEFAULT_LANGUAGE. ALTER LOGIN... Se admite la cláusula PASSWORD, pero la cláusula ALTER LOGIN... OLD_PASSWORD no se admite. Solo un inicio de sesión que sea miembro del administrador del sistema puede modificar una contraseña.

Intercalación que distingue entre mayúsculas de minúsculas CREATE DATABASE

La instrucción CREATE DATABASE no admite las intercalaciones que distinguen mayúsculas de minúsculas.

Palabras clave y cláusulas de CREATE DATABASE

No se admiten las opciones excepto COLLATE y CONTAINMENT=NONE. La cláusula COLLATE se acepta y siempre se establece en el valor de babelfishpg_tsql.server_collation_name.

Cláusulas CREATE SCHEMA... admitidas

Puede utilizar el comando CREATE SCHEMA para crear un esquema vacío. Utilice comandos adicionales para crear objetos de esquema.

Los valores de ID de base de datos son diferentes en Babelfish

Las bases de datos maestra y tempdb no serán los ID de base de datos 1 y 2.

La función de tipo de fecha FORMAT se admite con las siguientes limitaciones

No se admite el meridiano de un solo carácter.

El formato "yyy" de SQL Server devuelve 4 dígitos para los años superiores a 1000, pero solo 3 dígitos para los demás.

No se admiten los formatos "g" y "R"

La configuración regional "vi-VN" es ligeramente diferente.

Identificadores superiores a 63 caracteres

PostgreSQL admite un máximo de 63 caracteres para los identificadores. Babelfish convierte los identificadores de más de 63 caracteres en un nombre que incluye un hash del nombre original. Por ejemplo, una tabla creada como "AB(ABC1234567890123456789012345678901234567890123456789012345678901234567890" se podría convertir a "ABC123456789012345678901234567890123456789012345678901234567890".

Compatibilidad con columnas IDENTITY

Se admiten las columnas IDENTITY para los tipos de datos tinyint, smallint, int, bigint, numeric y decimal.

SQL Server admite precisión de 38 lugares para los tipos de datos numeric y decimal en columnas IDENTITY.

PostgreSQL admite precisión de 19 lugares para los tipos de datos numeric y decimal en columnas IDENTITY.

Índices con IGNORE_DUP_KEY

La sintaxis que crea un índice que incluye IGNORE_DUP_KEY crea un índice como si se omitiera esta propiedad.

Índices con más de 32 columnas

Un índice no puede incluir más de 32 columnas. Las columnas de índice incluidas se cuentan hacia el máximo en PostgreSQL, pero no en SQL Server.

Índices (en clúster)

Los índices en clúster se crean como si NONclústerED se hubiera especificado.

Cláusulas de índices

Se ignoran las siguientes cláusulas: FILLFACTOR, ALLOW_PAGE_LOCKS, ALLOW_ROW_LOCKS, PAD_INDEX, STATISTICS_NORECOMPUTE, OPTIMIZE_FOR_SEQUENTIAL_KEY, SORT_IN_TEMPDB, DROP_EXISTING, ONLINE, COMPRESSION_DELAY, MAXDOP y DATA_COMPRESSION

Compatibilidad con JSON

El orden de los pares nombre-valor no está garantizado. Sin embargo, el tipo de matriz no se ve afectado.

Objetos LOGIN

No se admiten todas las opciones para objetos LOGIN, excepto para DEFAULT_DATABASE, DEFAULT_LANGUAGE, ENABLE, DISABLE.

Función NEWSEQUENTIALID

Implementado como NEWID; el comportamiento secuencial no está garantizado. Al llamar a NEWSEQUENTIALID, PostgreSQL genera un nuevo valor de GUID.

Las siguientes limitaciones admiten la cláusula OUTPUT

OUTPUT y OUTPUT INTO no se admiten en la misma consulta de DML. No se admiten las referencias a la tabla que no es de destino de las operaciones UPDATE o DELETE en una cláusula OUTPUT. OUTPUT... DELETED *, INSERTED * no se admiten en la misma consulta.

Límite de parámetros de procedimiento o función

Babelfish admite un máximo de 100 parámetros para un procedimiento o función.

ROWGUIDCOL

Esta cláusula se omite actualmente. Las consultas que referencian a $GUIDGOL provocan un error de sintaxis.

Compatibilidad con objetos SEQUENCE

Los objetos SEQUENCE se admiten en los tipos de datos tinyint, smallint, int, bigint, numéricos y decimales.

Aurora PostgreSQL admite la precisión de 19 posiciones para tipos de datos numéricos y decimales en un objeto SEQUENCE.

Roles de nivel de servidor

Se puede usar el rol de nivel de servidor sysadmin. No se pueden usar otros roles de nivel de servidor (distintos de sysadmin).

Roles de nivel de base de datos distintos de db_owner

Se admiten los roles de nivel de base de datos db_owner y los roles de nivel de base de datos definidos por el usuario. No se pueden usar otros roles de nivel de base de datos (distintos de db_owner).

Palabra clave SPARSE de SQL

La palabra clave SPARSE se acepta e ignora.

Cláusula de palabras clave de SQL ON filegroup

Esta cláusula se omite actualmente.

Palabras clave de SQL CLUSTERED y NONCLUSTERED para índices y restricciones

Babelfish acepta e ignora las palabras clave CLUSTERED y NONCLUSTERED.

sysdatabases.cmptlevel

sysdatabases.cmptlevel siempre se establece en 120.

tempdb no se reinicializa al reiniciar

Los objetos permanentes (como tablas y procedimientos) creados en tempdb no se eliminan cuando se reinicia la base de datos.

Grupo de archivos TEXTIMAGE_ON

Babelfish ignora la cláusula TEXTIMAGE_ON filegroup.

Precisión del tiempo

Babelfish admite una precisión de 6 dígitos para los segundos fraccionados. No se prevén efectos negativos con este comportamiento.

Niveles de aislamiento de transacciones

READUNCOMMITTED se trata igual que READCOMMITTED.

Columnas calculadas virtuales (no persistentes)

Las columnas calculadas virtuales se crean como persistentes.

Sin cláusula SCHEMABINDING

Esta cláusula no se admite en funciones, procedimientos, desencadenadores ni vistas. Se crea el objeto, pero como si se hubiera especificado WITH SCHEMABINDING.