Gerenciar o tratamento de erros do Babelfish com hatches de escape
O Babelfish imita o comportamento do SQL para fluxo de controle e estado de transações sempre que possível. Quando o Babelfish encontra um erro, ele retorna um código de erro semelhante ao código de erro do SQL Server. Se o Babelfish não conseguir mapear o erro para um código do SQL Server, ele retornará um código de erro fixo (33557097
) e realizará ações específicas com base no tipo de erro, da seguinte forma:
-
Se for um erro de tempo de compilação, o Babelfish reverterá a transação.
-
No caso de erros de tempo de execução, o Babelfish encerrará o lote e reverterá a transação.
-
Para um erro de protocolo entre o cliente e o servidor, a transação não será revertida.
Se um código de erro não puder ser mapeado para um código equivalente, e o código de um erro semelhante estiver disponível, o código do erro será mapeado para esse código alternativo. Por exemplo, os comportamentos que causam os códigos 8143
e 8144
do SQL Server são ambos mapeados para 8143
.
Erros que não podem ser mapeados não respeitam uma construção TRY... CATCH
.
Você pode usar @@ERROR
para retornar um código de erro do SQL Server ou a função @@PGERROR
para retornar um código de erro do PostgreSQL. Também pode utilizar a função fn_mapped_system_error_list
para retornar uma lista de códigos de erro mapeados. Para obter informações sobre códigos de erro do PostgreSQL, consulte o site do PostgreSQL
Modificar as configurações do hatch de escape do Babelfish
Para lidar com instruções que podem falhar, o Babelfish define certas opções denominadas hatches de escape. Um hatch de escape é uma opção que especifica o comportamento do Babelfish quando ele se depara com um recurso ou uma sintaxe sem suporte.
Você pode utilizar o procedimento armazenado sp_babelfish_configure
para controlar as configurações de um hatch de escape. Use o script para definir o hatch de escape como ignore
ou strict
. Se estiver definido como strict
, o Babelfish retornará um erro que você precisará corrigir antes de continuar.
Para aplicar as alterações à sessão atual e no nível do cluster, inclua a palavra-chave server
.
O uso é o seguinte:
Para listar todos os hatches de escape e seu status, além de informações de uso, execute
sp_babelfish_configure
.Para listar os hatches de escape nomeados e seus valores, seja para a sessão atual ou em todo o cluster, execute o comando
sp_babelfish_configure '
, em quehatch_name
'
é o identificador de um ou mais hatches de escape.hatch_name
hatch_name
pode utilizar curingas SQL, como "%".Para definir um ou mais hatches de escape para o valor especificado, execute
sp_babelfish_configure ['
. Para tornar as configurações permanentes em todo o cluster, inclua a palavra-chavehatch_name
' [, 'strict'|'ignore' [, 'server']]server
, conforme mostrado a seguir:EXECUTE sp_babelfish_configure 'escape_hatch_unique_constraint', 'ignore', 'server'
Para configurá-las apenas para a sessão atual, não use
server
.Para redefinir todos os hatches de escape para seus valores padrão, execute
sp_babelfish_configure 'default'
(Babelfish 1.2.0 e posterior).
A string que identifica o hatch (ou os hatches) pode conter curingas SQL. Por exemplo, o seguinte define todos os hatches de escape de sintaxe como ignore
para o cluster do Aurora PostgreSQL.
EXECUTE sp_babelfish_configure '%', 'ignore', 'server'
Na tabela a seguir, você pode encontrar descrições e valores padrão para os hatches de escape predefinidos do Babelfish.
Hatch de escape | Descrição | Padrão |
---|---|---|
escape_hatch_checkpoint |
Permite o uso da instrução CHECKPOINT no código processual, mas a instrução CHECKPOINT não está implementada no momento. |
ignorar |
escape_hatch_constraint_name_for_default |
Controla o comportamento do Babelfish relacionado a nomes de restrições padrão. |
ignorar |
escape_hatch_database_misc_options |
Controla o comportamento do Babelfish relacionado às seguintes opções em CREATE ou ALTER DATABASE: CONTAINMENT, DB_CHAINING, TRUSTWORTHY, PERSISTENT_LOG_BUFFER. |
ignorar |
escape_hatch_for_replication |
Controla o comportamento do Babelfish relacionado à cláusula [NOT] FOR REPLICATION ao criar ou modificar uma tabela. |
strict |
escape_hatch_fulltext |
Controla o comportamento do Babelfish relacionado a recursos FULLTEXT, como DEFAULT_FULLTEXT_LANGUAGE in CREATE/ALTER DATABASE, CREATE FULLTEXT INDEX ou sp_fulltext_database. |
ignorar |
escape_hatch_ignore_dup_key |
Controla o comportamento do Babelfish relacionado a CREATE/ALTER TABLE e CREATE INDEX. Quando IGNORE_DUP_KEY=ON, é gerado um erro quando definido como |
strict |
escape_hatch_index_clustering |
Controla o comportamento do Babelfish relacionado às palavras-chave CLUSTERED ou NONCLUSTERED para índices e restrições PRIMARY KEY ou UNIQUE. Quando CLUSTERED é ignorado, o índice ou a restrição ainda é criado como se NONCLUSTERED tivesse sido especificada. |
ignorar |
escape_hatch_index_columnstore |
Controla o comportamento do Babelfish relacionado à cláusula COLUMNSTORE. Se você especificar |
strict |
escape_hatch_join_hints |
Controla o comportamento de palavras-chave em um operador JOIN: LOOP, HASH, MERGE, REMOTE, REDUCE, REDISTRIBUTE, REPLICATE. |
ignorar |
escape_hatch_language_non_english |
Controla o comportamento do Babelfish relacionado a idiomas diferentes do inglês para mensagens na tela. No momento, o Babelfish oferece suporte apenas a |
strict |
escape_hatch_login_hashed_password |
Quando ignorada, suprime o erro para a palavra-chave |
strict |
escape_hatch_login_misc_options |
Quando ignorada, suprime o erro para outras palavras-chave além de |
strict |
escape_hatch_login_old_password |
Quando ignorada, suprime o erro para a palavra-chave |
strict |
escape_hatch_login_password_must_change |
Quando ignorada, suprime o erro para a palavra-chave |
strict |
escape_hatch_login_password_unlock |
Quando ignorada, suprime o erro para a palavra-chave |
strict |
escape_hatch_nocheck_add_constraint |
Controla o comportamento do Babelfish relacionado à cláusula WITH CHECK ou NOCHECK para restrições. |
strict |
escape_hatch_nocheck_existing_constraint |
Controla o comportamento do Babelfish relacionado a restrições FOREIGN KEY ou CHECK. |
strict |
escape_hatch_query_hints |
Controla o comportamento do Babelfish relacionado a dicas de consultas. Quando essa opção é definida como ignore, o servidor ignora as dicas que usam a cláusula OPTION (...) para especificar aspectos de processamento de consultas. Exemplos incluem SELECT FROM... OPTION(MERGE JOIN HASH, MAXRECURSION 10)). |
ignorar |
escape_hatch_rowversion |
Controla o comportamento dos tipos de dados ROWVERSION e TIMESTAMP. Para ter mais informações, consulte Usar recursos do Babelfish com implementação limitada. |
strict |
escape_hatch_schemabinding_function |
Controla o comportamento do Babelfish referente à cláusula WITH SCHEMABINDING. Por padrão, a cláusula WITH SCHEMABINDING é ignorada ao ser especificada com o comando CREATE ou ALTER FUNCTION. |
ignorar |
escape_hatch_schemabinding_procedure |
Controla o comportamento do Babelfish referente à cláusula WITH SCHEMABINDING. Por padrão, a cláusula WITH SCHEMABINDING é ignorada ao ser especificada com o comando CREATE ou ALTER PROCEDURE. |
ignorar |
escape_hatch_rowguidcol_column |
Controla o comportamento do Babelfish relacionado à cláusula ROWGUIDCOL ao criar ou modificar uma tabela. |
strict |
escape_hatch_schemabinding_trigger |
Controla o comportamento do Babelfish referente à cláusula WITH SCHEMABINDING. Por padrão, a cláusula WITH SCHEMABINDING é ignorada ao ser especificada com o comando CREATE ou ALTER TRIGGER. |
ignorar |
escape_hatch_schemabinding_view |
Controla o comportamento do Babelfish referente à cláusula WITH SCHEMABINDING. Por padrão, a cláusula WITH SCHEMABINDING é ignorada ao ser especificada com o comando CREATE ou ALTER VIEW. |
ignorar |
escape_hatch_session_settings |
Controla o comportamento do Babelfish em relação a instruções SET em nível de sessão incompatíveis. |
ignorar |
escape_hatch_showplan_all |
Controla o comportamento do Babelfish com relação a SET SHOWPLAN_ALL e SET STATISTICS PROFILE. Quando definidos para serem ignorados, eles se comportam como SET BABELFISH_SHOWPLAN_ALL e SET BABELFISH_STATISTICS PROFILE; quando definidos para serem estritos, são ignorados silenciosamente. |
strict |
escape_hatch_storage_on_partition |
Controla o comportamento do Babelfish relacionado à cláusula |
strict |
escape_hatch_storage_options |
Hatch de escape em qualquer opção de armazenamento utilizada em CREATE, ALTER DATABASE, TABLE, INDEX. Isso inclui cláusulas (LOG) ON, TEXTIMAGE_ON e FILESTREAM_ON que definem locais de armazenamento (partições e grupos de arquivos) para tabelas, índices e restrições e também para um banco de dados. Essa configuração de hatch de escape aplica-se a todas essas cláusulas (incluindo ON [PRIMARY] e ON “DEFAULT”). A exceção é quando uma partição é especificada para uma tabela ou um índice com ON partition_scheme (coluna). |
ignorar |
escape_hatch_table_hints |
Controla o comportamento de dicas de tabelas especificadas utilizando a cláusula WITH (...). |
ignorar |
escape_hatch_unique_constraint |
Quando definido como estrito, uma diferença semântica obscura entre o SQL Server e o PostgreSQL no tratamento de valores NULL em colunas indexadas pode gerar erros. A diferença semântica só surge em casos de uso não realistas, para que você possa definir esse hatch de escape como “ignorar” para evitar ver o erro. Obsoleto nas seguintes versões: 3.6.0 e versões posteriores, 4.2.0 e versões posteriores. |
strict |