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 que- hatch_name'- hatch_name- hatch_namepode 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-chave- hatch_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 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 |