Este tópico aborda operações T-SQL comuns e limitações de compatibilidade conhecidas em instâncias do ApsaraDB RDS for PostgreSQL com o Babelfish ativado. Conecte-se à instância pela porta do Tabular Data Stream (TDS) antes de executar os exemplos.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância do ApsaraDB RDS for PostgreSQL com o Babelfish ativado
Um cliente que se conecta pela porta TDS (por exemplo, sqlcmd ou SQL Server Management Studio)
Operações comuns
Consultas de sistema
|
Operação |
SQL |
|
Consultar a versão do banco de dados |
|
|
Listar todos os bancos de dados |
|
Operações de banco de dados
Crie um banco de dados
CREATE DATABASE testdb;
No modo de migração
Single-DB
, apenas um banco de dados é permitido. Se já existir um banco de dados, a instrução
CREATE DATABASE
falhará.
Consultar um banco de dados
SELECT * FROM sys.databases WHERE name = 'testdb';
Alternar para um banco de dados
USE testdb
GO
SELECT db_name();
Exclua um banco de dados
DROP DATABASE testdb;
Operações de esquema
Crie um esquema
CREATE SCHEMA sch_demo;
Visualize um esquema
SELECT * FROM sys.schemas AS sch WHERE sch.name = 'sch_demo';
Crie uma tabela em um esquema
CREATE TABLE sch_demo.tb_demo(id int);
SELECT
sch.name AS schema_name,
tb.name AS table_name
FROM sys.tables AS tb
INNER JOIN sys.schemas AS sch
ON tb.schema_id = sch.schema_id
WHERE tb.name = 'tb_demo';
Exclua um esquema
Exclua todas as tabelas do esquema antes de excluir o próprio esquema.
DROP TABLE sch_demo.tb_demo;
GO
DROP SCHEMA sch_demo;
GO
Operações de tabela
Crie uma tabela
USE testdb
GO
CREATE TABLE dbo.tb_test(
id int not null IDENTITY(1,1) PRIMARY KEY,
name varchar(50))
GO
Consultar uma tabela
SELECT sche.name AS schema_name, tb.name AS table_name
FROM sys.tables AS tb
INNER JOIN sys.schemas AS sche
ON tb.schema_id = sche.schema_id
WHERE tb.name = 'tb_test';
GO
Adicionar uma coluna
ALTER TABLE dbo.tb_test ADD col_added bigint null;
GO
Modifique uma coluna
ALTER TABLE dbo.tb_test ALTER column col_added varchar(50);
GO
Exclua uma coluna
ALTER TABLE dbo.tb_test DROP column col_added;
GO
Crie um índice
CREATE INDEX ix_tb_test_name ON tb_test(name);
GO
Exclua um índice
DROP INDEX ix_tb_test_name ON tb_test;
GO
Operações de dados
INSERT
INSERT INTO dbo.tb_test
SELECT 'A' UNION ALL
SELECT 'B';
GO
Selecione
SELECT * FROM dbo.tb_test;
Atualize
UPDATE TOP(1) dbo.tb_test
SET name = 'A_updated';
GO
Exclua
DELETE TOP(1) FROM dbo.tb_test;
GO
SELECT * FROM dbo.tb_test;
Operações de procedimento armazenado
Crie um procedimento armazenado
USE testdb
GO
CREATE PROC dbo.UP_getDemoData(
@id int
)
AS
BEGIN
SET NOCOUNT ON
SELECT *
FROM dbo.tb_test
WHERE id = @id
END;
GO
Visualize um procedimento armazenado
SELECT *
FROM sys.procedures
WHERE name = 'up_getdemodata';
Executar um procedimento armazenado
EXEC dbo.UP_getDemoData @id = 7;
GO
Exclua um procedimento armazenado
USE testdb
GO
DROP PROC dbo.UP_getDemoData
GO
Limitações de compatibilidade
Esta seção aborda cenários comuns de incompatibilidade. Para obter a lista completa, consulte a
documentação do Babelfish for PostgreSQL
.
As instruções T-SQL a seguir não têm suporte quando o Babelfish está ativado.
|
Operação sem suporte |
Impacto |
Solução alternativa |
|
|
Erro |
Nenhuma disponível via porta TDS |
|
|
Erro |
Omita a palavra-chave |
|
|
Erro |
Exclua e recrie o índice; veja detalhes abaixo |
|
|
Erro |
Exclua e recrie o procedimento armazenado; veja detalhes abaixo |
|
|
Erro |
Nenhuma disponível via porta TDS |
Visualize esquema da tabela via sp_help
O comando EXEC sp_help não tem suporte:
-- Not supported
EXEC sp_help 'dbo.tb_test'
Defina uma coluna como anulável ao modificá-la
Defina NULL explicitamente ao alterar uma coluna não tem suporte. Em vez disso, omita a palavra-chave NULL:
-- Not supported
ALTER TABLE dbo.tb_test ALTER column col_added varchar(50) null;
GO
-- Workaround: omit the NULL keyword
ALTER TABLE dbo.tb_test ALTER column col_added varchar(50);
GO
Recriar um índice
O comando ALTER INDEX ... REBUILD não tem suporte. Em vez disso, exclua e recrie o índice:
-- Not supported
ALTER INDEX ix_tb_test_name ON tb_test REBUILD;
GO
-- Workaround: drop then recreate
DROP INDEX ix_tb_test_name ON tb_test;
GO
CREATE INDEX ix_tb_test_name ON tb_test(name);
GO
Modifique um procedimento armazenado
O comando ALTER PROC não tem suporte. Em vez disso, exclua e recrie o procedimento armazenado:
-- Not supported
USE testdb
GO
ALTER PROC dbo.UP_getDemoData(
@id int
)
AS
BEGIN
SET NOCOUNT ON
SELECT *
FROM dbo.tb_test
WHERE id >= @id
END;
GO
-- Workaround: drop then recreate
USE testdb
GO
DROP PROC dbo.UP_getDemoData
GO
CREATE PROC dbo.UP_getDemoData(
@id int
)
AS
BEGIN
SET NOCOUNT ON
SELECT *
FROM dbo.tb_test
WHERE id >= @id
END;
GO
Consultar um plano de execução
O comando SET showplan_xml ON não tem suporte:
-- Not supported
SET showplan_xml ON
SELECT * from tb_test;