Como consultar múltiplos bancos e ambientes na mesma query SQL?

Consulte tabelas de outros projetos ou ambientes na mesma query, mesmo entre PostgreSQL e MySQL. Não é preciso configurar um DB Link no servidor.

Cruzar dados de dois bancos, ou olhar uma tabela de Produção enquanto a aba está em Homologação, costuma tirar você do editor. Em muitos clientes SQL isso vira exportar CSV, rodar um script à parte ou configurar um DB Link no servidor.

DB Link pede configuração e permissão extra no servidor, e costuma falhar quando os bancos são de tecnologias diferentes, como PostgreSQL e MySQL.

O Kerry Studio deixa consultar a tabela da outra conexão na mesma query. Você define um alias SQL no projeto e referencia a tabela remota como @projeto.tabela, por exemplo @billing.orders.

Na execução, o Kerry busca as linhas pela conexão salva e as coloca numa tabela temporária na conexão da aba. O JOIN roda aí, sem DB Link e sem instalar nada no servidor. A mesma sintaxe vale entre PostgreSQL e MySQL.

Você cruza os dados no editor, sem sair da query.

Como definir o alias

O alias vive no projeto, no campo Alias SQL (@alias). Sem esse nome, o editor não tem o que resolver no token.

Você precisa de um workspace aberto, de um projeto com o campo preenchido e de uma aba SQL.

  1. No diálogo Novo projeto ou Editar projeto, informe o alias, por exemplo billing. O @ não entra no campo. Ele só aparece no SQL.
  2. Conecte a aba no projeto e no ambiente em que a query deve rodar.
  3. No editor, escreva @projeto.tabela no lugar da tabela remota, por exemplo @billing.public.orders.
  4. Execute. O Kerry busca as linhas e monta a temporária na conexão da aba.

A paleta (⌘K / CtrlK) → Nova Conexão abre o mesmo diálogo de projeto.

Como escrever o alias no SQL

Há dois jeitos de escrever o alias.

@projeto.tabela, por exemplo @billing.orders, usa o ambiente em que a aba está. Com schema, o caminho é o do motor: @billing.public.orders.

@projeto:ambiente, por exemplo @billing:production, usa aquele ambiente mesmo que a aba esteja em outro. O : fica só entre o alias e o ambiente. O resto continua com .: @billing:production.public.orders.

Schema, tabela e coluna usam ., nunca :. Certo: @billing.public.orders, @billing:production.public.orders. Errado: @billing:production:public.orders.

@nome sozinho, sem .tabela e sem :ambiente, é variável de usuário do MySQL (SET @s). Não é alias.

Quem define @… é você, no projeto. O alias precisa ser único entre os projetos salvos. Depois de @projeto: o editor lista os ambientes daquele projeto. Depois de @projeto:ambiente. lista schemas e tabelas daquela conexão.

O alias não troca o seletor de projeto da aba. Ele só escolhe de onde vêm aquelas linhas. Se o nome no SQL não for um projeto salvo, o editor marca o token e a execução falha com o nome que a query pediu.

Dois projetos na mesma query

Um caso comum é a aba num banco de pedidos e os clientes em outro projeto, já salvo.

sql
-- Aba no projeto shop, ambiente Homologação.
-- @shop.public.orders segue a aba.
-- @crm.public.customers busca o outro projeto, no ambiente da aba.

SELECT
  o.id,
  o.status,
  c.email
FROM @shop.public.orders o
JOIN @crm.public.customers c
  ON c.id = o.customer_id
WHERE o.created_at > current_date - 7;

Se crm for MySQL e a aba estiver em PostgreSQL, o padrão é o mesmo. O Kerry busca as linhas e o JOIN continua na conexão da aba.

Homologação e Produção na mesma query

Quando a aba está em Homologação e você quer a mesma tabela em Produção, trave o ambiente no token.

No SQLAba emO Kerry busca em
@shop.public.ordersHomologaçãoHomologação do projeto shop
@shop:production.public.ordersHomologaçãoProdução do projeto shop
sql
-- Aba no projeto shop, ambiente Homologação.

SELECT
  h.id,
  h.status AS status_homologacao,
  p.status AS status_producao
FROM @shop.public.orders h
JOIN @shop:production.public.orders p
  ON p.id = h.id
WHERE h.status <> p.status;

Se você só trocar a aba de ambiente, a query no editor continua a mesma. O que muda é o token sem :ambiente, porque ele segue a aba. O token com :production continua apontando para Produção.