Usar recursos do Babelfish com implementação limitada - Amazon Aurora

Usar recursos do Babelfish com implementação limitada

Toda nova versão do Babelfish adiciona compatibilidade com recursos que se alinham melhor à funcionalidade e ao comportamento do T-SQL. Ainda assim, existem alguns recursos e diferenças não compatíveis com a implementação atual. A seguir, você pode encontrar informações sobre diferenças funcionais entre o Babelfish e o T-SQL, com algumas soluções alternativas ou notas de uso.

A partir da versão 1.2.0 do Babelfish, os recursos a seguir no momento têm implementações limitadas:

  • Catálogos do SQL Server (visualizações do sistema): os catálogos sys.sysconfigures, sys.syscurconfigs e sys.configurations são compatíveis com uma única configuração somente leitura. O sp_configure não é compatível no momento. Para obter mais informações sobre as outras visualizações do SQL Server implementadas pelo Babelfish, consulte Obter informações do catálogo de sistemas do Babelfish.

  • Permissões GRANT: GRANT…TO PUBLIC é compatível, mas GRANT…TO PUBLIC WITH GRANT OPTION não é compatível no momento.

  • Cadeia de propriedade e limitação do mecanismo de permissão do SQL Server: no Babelfish, a cadeia de propriedade do SQL Server funciona para visualizações, mas não para procedimentos armazenados. Isso significa que, assim como os procedimentos de chamada, os procedimentos devem ter acesso explícito a outros objetos pertencentes ao mesmo proprietário. No SQL Server, conceder permissões EXECUTE ao chamador no procedimento é suficiente para chamar outros objetos pertencentes ao mesmo proprietário. No Babelfish, o chamador também deve receber permissões nos objetos acessados pelo procedimento.

  • Resolução de referências de objeto não qualificados (sem nome do esquema): quando um objeto SQL (procedimento, visualização, função ou acionador) faz referência a um objeto sem o qualificar um nome de esquema, o SQL Server resolve o nome do esquema do objeto usando o nome do esquema do objeto SQL no qual a referência ocorre. No momento, o Babelfish resolve isso de forma diferente, usando o esquema padrão do usuário do banco de dados que executa o procedimento.

  • Alterações, sessões e conexões de esquema padrão: se os usuários alterarem o esquema padrão com ALTER USER...WITH DEFAULT SCHEMA, a alteração entrará em vigor imediatamente nessa sessão. No entanto, quanto a outras sessões pertencentes ao mesmo usuário que estão conectadas no momento, o tempo difere da seguinte forma:

    • Para SQL Server: a alteração entra em vigor imediatamente em todas as outras conexões para esse usuário.

    • Para Babelfish: a alteração entra em vigor para esse usuário apenas para novas conexões.

  • Implementação de tipos de dados ROWVERSION e TIMESTAMP e configuração de hatch de escape: os tipos de dados ROWVERSION e TIMESTAMP agora são compatíveis com o Babelfish. Para usar ROWVERSION ou TIMESTAMP no Babelfish, você deve alterar a configuração do hatch de escape babelfishpg_tsql.escape_hatch_rowversion de seu padrão (estrito) para ignore. Na maioria das vezes, a implementação do Babelfish dos tipos de dados ROWVERSION e TIMESTAMP é semanticamente idêntica à do SQL Server, com as seguintes exceções:

    • A função @@DBTS integrada se comporta de forma semelhante ao SQL Server, mas com pequenas diferenças. Em vez de retornar o último valor usado para SELECT @@DBTS, o Babelfish gera um novo carimbo de data/hora, devido ao mecanismo de banco de dados PostgreSQL subjacente e sua implementação de controle de simultaneidade de várias versões (MVCC).

    • No SQL Server, cada linha inserida ou atualizada recebe um valor ROWVERSION/TIMESTAMP exclusivo. No Babelfish, cada linha inserida atualizada pela mesma instrução recebe o mesmo valor ROWVERSION/TIMESTAMP.

      Por exemplo, quando uma instrução UPDATE ou INSERT-SELECT afeta várias linhas, no SQL Server todas as linhas afetadas têm valores diferentes na coluna ROWVERSION/TIMESTAMP. No Babelfish (PostgreSQL), as linhas têm o mesmo valor.

    • No SQL Server, ao criar uma tabela com SELECT-INTO, você pode converter um valor explícito (como NULL) em uma coluna ROWVERSION/TIMESTAMP a ser criada. Ao executar essa mesma ação no Babelfish, ele atribui um valor ROWVERSION/TIMESTAMP real a cada linha na nova tabela para você.

    Essas pequenas diferenças nos tipos de dados ROWVERSION/TIMESTAMP não devem ter um impacto adverso nas aplicações executadas no Babelfish.

Criação, propriedade e permissões de esquema: as permissões para criar e acessar objetos em um esquema criado por um usuário não DBO (usando CREATE SCHEMA schema name AUTHORIZATION user name) diferem para usuários não DBO do SQL Server e do Babelfish, conforme mostrado na seguinte tabela:

O usuário do banco de dados (não DBO) que é dono do esquema pode fazer o seguinte: SQL Server Babelfish

Criar objetos no esquema sem concessões adicionais pelo DBO?

Não

Sim

Acessar objetos criados por DBO no esquema sem concessões adicionais?

Sim

Não