Administración de la gestión de errores de Babelfish con escotillas de escape
Babelfish imita el comportamiento de SQL en el flujo de control y el estado de transacción siempre que sea posible. Cuando Babelfish encuentra un error, devuelve un código de error similar al código de error de SQL Server. Si Babelfish no puede asignar el error a un código de SQL Server, devuelve un código de error fijo (33557097
) y realiza acciones específicas en función del tipo de error, como se indica a continuación:
-
En el caso de los errores de tiempo de compilación, Babelfish revierte la transacción.
-
En el caso de los errores de tiempo de ejecución, Babelfish finaliza el lote y revierte la transacción.
-
En el caso de los errores de protocolo entre el cliente y el servidor, la transacción no se revierte.
Si un código de error no se puede asignar a un código equivalente y el código de un error similar está disponible, el código de error se asigna al código alternativo. Por ejemplo, los comportamientos que provocan los códigos 8143
y 8144
de SQL Server se asignan a 8143
.
Los errores que no se pueden asignar no respetan una construcción de TRY... CATCH
.
Puede usar @@ERROR
para devolver un código de error de SQL Server o la función @@PGERROR
para devolver un código de error de PostgreSQL. También puede utilizar la función fn_mapped_system_error_list
para devolver una lista de códigos de error asignados. Para obtener información sobre los códigos de error de PostgreSQL, consulte el sitio web de PostgreSQL
Modificación de la configuración de escotilla de escape Babelfish
Para gestionar mejor las instrucciones que podrían producir errores, Babelfish define ciertas opciones llamadas “escotillas de escape”. Una escotilla de escape es una opción que especifica el comportamiento de Babelfish cuando encuentra una característica o sintaxis no admitidas.
Puede utilizar el procedimiento almacenado sp_babelfish_configure
para controlar la configuración de una escotilla de escape. Utilice el script para establecer la escotilla de escape en ignore
o strict
. Si está configurado en strict
, Babelfish devuelve un error que debe corregir antes de continuar.
Incluya la palabra clave server
para aplicar los cambios a la sesión actual y a nivel de clúster.
El uso es como se indica a continuación:
Para enumerar todas las escotillas de escape y su estado, además de la información de uso, ejecute
sp_babelfish_configure
.Para enumerar las escotillas de escape con nombre y sus valores, en la sesión actual o en todo el clúster, ejecute el comando
sp_babelfish_configure '
en el quehatch_name
'
es el identificador de una o más escotillas de escape.hatch_name
hatch_name
puede utilizar comodines de SQL, como '%'.Para establecer uno o más escotillas de escape en el valor especificado, ejecute
sp_babelfish_configure ['
. Para que la configuración sea permanente a nivel de todo el clúster, incluya la palabra clavehatch_name
' [, 'strict'|'ignore' [, 'server']]server
, como se muestra a continuación:EXECUTE sp_babelfish_configure 'escape_hatch_unique_constraint', 'ignore', 'server'
Para configurarlos solo para la sesión actual, no utilice
server
.Para restablecer todas las escotillas de escape a sus valores predeterminados, ejecute
sp_babelfish_configure 'default'
(Babelfish 1.2.0 y posteriores).
La cadena que identifica la escotilla (o escotillas) podría contener comodines de SQL. Por ejemplo, a continuación, se establecen todas las escotillas de escape de sintaxis en ignore
para el clúster de Aurora PostgreSQL.
EXECUTE sp_babelfish_configure '%', 'ignore', 'server'
En la tabla siguiente encontrará descripciones y valores predeterminados para las escotillas de escape predefinidas Babelfish.
Escotilla de escape | Descripción | Predeterminado |
---|---|---|
escape_hatch_checkpoint |
Permite el uso de la instrucción CHECKPOINT en el código de procedimiento, pero la instrucción CHECKPOINT no está implementada actualmente. |
ignore |
escape_hatch_constraint_name_for_default |
Controla el comportamiento de Babelfish relacionado con los nombres de restricciones predeterminados. |
ignore |
escape_hatch_database_misc_options |
Controla el comportamiento de Babelfish relacionado con las siguientes opciones de CREATE o ALTER DATABASE: CONTAINMENT, DB_CHAINING, TRUSTWORTHY, PERSISTENT_LOG_BUFFER. |
ignore |
escape_hatch_for_replication |
Controla el comportamiento de Babelfish relacionado con la cláusula [NOT] FOR REPLICATION cuando se crea o modifica una tabla. |
strict |
escape_hatch_fulltext |
Controla el comportamiento de Babelfish relacionado con las características de FULLTEXT, como DEFAULT_FULLTEXT_LANGUAGE en CREATE/ALTER DATABASE, CREATE FULLTEXT INDEX o sp_fulltext_database. |
ignore |
escape_hatch_ignore_dup_key |
Controla el comportamiento de Babelfish relacionado con CREATE/ALTER TABLE y CREATE INDEX. Cuando IGNORE_DUP_KEY=ON genera un error cuando se establece en |
strict |
escape_hatch_index_clustering |
Controla el comportamiento de Babelfish relacionado con las palabras clave clústerED o NONclústerED para índices y restricciones PRIMARY KEY o UNIQUE. Cuando se ignora clústerED, el índice o la restricción se siguen creando como si se hubiera especificado NONclústerED. |
ignore |
escape_hatch_index_columnstore |
Controla el comportamiento de Babelfish relacionado con la cláusula COLUMNSTORE. Si se especifica |
strict |
escape_hatch_join_hints |
Controla el comportamiento de las palabras clave en un operador JOIN: LOOP, HASH, MERGE, REMOTE, REDUCE, REDISTRIBUTE, REPLICATE. |
ignore |
escape_hatch_language_non_english |
Controla el comportamiento de Babelfish relacionado con idiomas distintos del inglés para los mensajes en pantalla. Babelfish actualmente solo admite |
strict |
escape_hatch_login_hashed_password |
Cuando se ignora, suprime el error de la palabra clave |
strict |
escape_hatch_login_misc_options |
Cuando se ignora, suprime el error de otras palabras clave además de |
strict |
escape_hatch_login_old_password |
Cuando se ignora, suprime el error de la palabra clave |
strict |
escape_hatch_login_password_must_change |
Cuando se ignora, suprime el error de la palabra clave |
strict |
escape_hatch_login_password_unlock |
Cuando se ignora, suprime el error de la palabra clave |
strict |
escape_hatch_nocheck_add_constraint |
Controla el comportamiento de Babelfish relacionado con la cláusula WITH CHECK o NOCHECK para las restricciones. |
strict |
escape_hatch_nocheck_existing_constraint |
Controla el comportamiento de Babelfish relacionado con las restricciones FOREIGN KEY o CHECK. |
strict |
escape_hatch_query_hints |
Controla el comportamiento de Babelfish relacionado con sugerencias de consulta. Cuando esta opción está configurada para ignorar, el servidor ignora las sugerencias que utilizan la cláusula OPTION (...) para especificar los aspectos del procesamiento de consultas. Algunos ejemplos incluyen SELECT FROM ... OPTION(MERGE JOIN HASH, MAXRECURSION 10)). |
ignore |
escape_hatch_rowversion |
Controla el comportamiento de los tipos de datos ROWVERSION y TIMESTAMP. Para obtener más información, consulte Uso de las características de Babelfish con implementación limitada. |
strict |
escape_hatch_schemabinding_function |
Controla el comportamiento de Babelfish relacionado con la cláusula WITH SCHEMABINDING. De forma predeterminada, la cláusula WITH SCHEMABINDING se ignora cuando se especifica con los comandos CREATE o ALTER FUNCTION. |
ignore |
escape_hatch_schemabinding_procedure |
Controla el comportamiento de Babelfish relacionado con la cláusula WITH SCHEMABINDING. De forma predeterminada, la cláusula WITH SCHEMABINDING se ignora cuando se especifica con los comandos CREATE o ALTER PROCEDURE. |
ignore |
escape_hatch_rowguidcol_column |
Controla el comportamiento de Babelfish relacionado con la cláusula ROWGUIDCOL cuando se crea o modifica una tabla. |
strict |
escape_hatch_schemabinding_trigger |
Controla el comportamiento de Babelfish relacionado con la cláusula WITH SCHEMABINDING. De forma predeterminada, la cláusula WITH SCHEMABINDING se ignora cuando se especifica con los comandos CREATE o ALTER TRIGGER. |
ignore |
escape_hatch_schemabinding_view |
Controla el comportamiento de Babelfish relacionado con la cláusula WITH SCHEMABINDING. De forma predeterminada, la cláusula WITH SCHEMABINDING se ignora cuando se especifica con los comandos CREATE o ALTER VIEW. |
ignore |
escape_hatch_session_settings |
Controla el comportamiento de Babelfish en relación con las instrucciones SET de nivel de sesión no admitidas. |
ignore |
escape_hatch_showplan_all |
Controla el comportamiento de Babelfish relacionado con SET SHOWPLAN_ALL y SET STATISTICS PROFILE. Cuando se configuran en ignore, se comportan como SET BABELFISH_SHOWPLAN_ALL y SET BABELFISH_STATISTICS PROFILE; cuando se configuran en strict, se ignoran silenciosamente. |
strict |
escape_hatch_storage_on_partition |
Controla el comportamiento de Babelfish relacionado con la cláusula |
strict |
escape_hatch_storage_options |
Escotilla de escape en cualquier opción de almacenamiento utilizada en CREATE, ALTER DATABASE, TABLE, INDEX. Esto incluye las cláusulas (LOG) ON, TEXTIMAGE_ON, FILESTREAM_ON que definen las ubicaciones de almacenamiento (particiones, grupos de archivos) para tablas, índices y restricciones, así como para una base de datos. Esta configuración de escotilla de escape se aplica a todas estas cláusulas (incluidas ON [PRIMARY] y ON "DEFAULT"). La excepción se produce cuando se especifica una partición para una tabla o índice con ON partition_scheme (columna). |
ignore |
escape_hatch_table_hints |
Controla el comportamiento de las sugerencias de tabla especificadas mediante la cláusula WITH (...). |
ignore |
escape_hatch_unique_constraint |
Cuando se establece en un nivel estricto, una diferencia semántica desconocida entre SQL Server y PostgreSQL en el manejo de valores NULL en columnas indexadas puede generar errores. La diferencia semántica solo surge en casos de uso poco realistas, por lo que puede configurar esta escotilla de escape para que se «ignore» y evitar ver el error. Obsoleto a partir de las siguientes versiones: 3.6.0 y versiones superiores, 4.2.0 y versiones superiores |
strict |