Uso de las características de Babelfish con implementación limitada - Amazon Aurora

Uso de las características de Babelfish con implementación limitada

Cada nueva versión de Babelfish agrega compatibilidad con más características que se alinean mejor con la funcionalidad y el comportamiento de T-SQL. No obstante, hay algunas características y diferencias que no se admiten en la implementación actual. A continuación, encontrará información sobre las diferencias funcionales entre Babelfish y T-SQL, con algunas soluciones alternativas o notas de uso.

A partir de la versión 1.2.0 de Babelfish, actualmente, las siguientes características tienen implementaciones limitadas:

  • Catálogos de SQL Server (vistas del sistema): los catálogossys.sysconfigures, sys.syscurconfigs y sys.configurations admiten una única configuración de solo lectura. sp_configure no es compatible actualmente. Para obtener más información acerca de otras vistas de SQL Server implementadas por Babelfish, consulte Obtención de información del catálogo del sistema de Babelfish.

  • Permisos GRANT: GRANT...TO PUBLIC se puede usar, pero GRANT..TO PUBLIC WITH GRANT OPTION no se puede usar actualmente.

  • Cadena de propiedad SQL Server y limitación del mecanismo de permisos: en Babelfish, la cadena de propiedad de SQL Server funciona para vistas pero no para procedimientos almacenados. Esto significa que se debe conceder a los procedimientos acceso explícito a otros objetos propiedad del mismo propietario que los procedimientos de llamada. En SQL Server, otorgar permisos EXECUTE a la entidad que llama en el procedimiento es suficiente para llamar a otros objetos del mismo propietario. En Babelfish, también se deben conceder permisos a la entidad que llama sobre los objetos a los que se accede mediante el procedimiento.

  • Resolución de referencias de objetos no calificadas (sin nombre de esquema): cuando un objeto SQL (procedimiento, vista, función o desencadenador) hace referencia a un objeto sin calificarlo con un nombre de esquema, SQL Server resuelve el nombre del esquema del objeto utilizando el nombre del esquema del objeto SQL en el que se produce la referencia. En la actualidad, Babelfish lo resuelve de forma diferente, utilizando el esquema predeterminado del usuario de la base de datos que ejecuta el procedimiento.

  • Cambios de esquema, sesiones y conexiones predeterminados: si los usuarios cambian su esquema predeterminado con ALTER USER...WITH DEFAULT SCHEMA, el cambio surte efecto inmediatamente en esa sesión. No obstante, para otras sesiones conectadas actualmente pertenecientes al mismo usuario, los tiempos difieren de la siguiente manera:

    • Para SQL Server: el cambio surte efecto en todas las demás conexiones del usuario de manera inmediata.

    • Para Babelfish: el cambio surte efecto para este usuario solo en nuevas conexiones.

  • Implementación de tipos de datos ROWVERSION y TIMESTAMP y configuración de escotilla de escape: los tipos de datos ROWVERSION y TIMESTAMP ahora son compatibles con Babelfish. Para utilizar ROWVERSION o TIMESTAMP en Babelfish, debe cambiar la configuración de la escotilla de escape babelfishpg_tsql.escape_hatch_rowversion de su valor predeterminado (estricto) a ignore. La implementación de Babelfish de los tipos de datos ROWVERSION y TIMESTAMP es en su mayoría idéntica semánticamente a SQL Server, con las siguientes excepciones:

    • La función @@DBTS incorporada se comporta de forma similar a la de SQL Server, pero con pequeñas diferencias. En lugar de devolver el último valor utilizado para SELECT @@DBTS, Babelfish genera una nueva marca de tiempo, debido al motor de base de datos PostgreSQL subyacente y a su implementación de control de simultaneidad multiversión (MVCC).

    • En SQL Server, cada fila insertada o actualizada obtiene un valor ROWVERSION/TIMESTAMP único. En Babelfish, a cada fila insertada actualizada con la misma instrucción se le asigna el mismo valor ROWVERSION/TIMESTAMP.

      Por ejemplo, cuando una instrucción UPDATE o una instrucción INSERT-SELECT afecta a varias filas, en SQL Server, las filas afectadas tienen todas valores diferentes en su columna ROWVERSION/TIMESTAMP. En Babelfish (PostgreSQL), las filas tienen el mismo valor.

    • En SQL Server, al crear una nueva tabla con SELECT-INTO, puede convertir un valor explícito (como NULL) a una columna ROWVERSION/TIMESTAMP que crear. Cuando se hace lo mismo en Babelfish, Babelfish asigna un valor real ROWVERSION/TIMESTAMP a cada fila de la nueva tabla por el usuario.

    Estas pequeñas diferencias en los tipos de datos ROWVERSION/TIMESTAMP no deberían tener un impacto negativo en las aplicaciones que se ejecutan en Babelfish.

Creación de esquemas, propiedad y permisos: los permisos para crear objetos, y acceder a ellos en un esquema propiedad de un usuario que no pertenece a DBO (mediante CREATE SCHEMA schema name AUTHORIZATION user name) son diferentes para los usuarios de SQL Server y Babelfish que no pertenecen a DBO, tal y como se muestra en la siguiente tabla:

El usuario de la base de datos (no DBO) que es propietario del esquema puede hacer lo siguiente: SQL Server Babelfish

¿Crear objetos en el esquema sin concesiones adicionales por parte del DBO?

No

¿Acceder a objetos creados por DBO en el esquema sin concesiones adicionales?

No