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
esys.configurations
são compatíveis com uma única configuração somente leitura. Osp_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) paraignore
. 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
) diferem para usuários não DBO do SQL Server e do Babelfish, conforme mostrado na seguinte tabela:schema name
AUTHORIZATION user name
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 |