Esta página descreve as principais considerações e etapas a seguir ao migrar do Spanner para outro banco de dados de dialeto do PostgreSQL se você quiser mover um aplicativo do Spanner ou do Google Cloud. Você também pode usar as informações desta página se precisar entender ou demonstrar a viabilidade de mover seu banco de dados, por exemplo, para saída estressada de planejamento de desastres.
Interface PostgreSQL do Spanner é a melhor escolha para aplicativos que precisam da opção de implantação em outro ambiente compatível com o PostgreSQL, seja no Google Cloud ou em outro lugar. Usando sintaxe e clientes padrão conhecidos do ecossistema do PostgreSQL, a Interface PostgreSQL permite que desenvolvedores e operadores usem os conhecimentos e habilidades atuais do PostgreSQL.
Ele usa o mesmo processamento de consultas, coordenação de transações, armazenamento distribuído e infraestrutura de rede que o dialeto GoogleSQL. Se você precisa de um banco de dados com suporte à portabilidade, não compromete os benefícios de escalabilidade, consistência ou custo-benefício do Spanner ao selecionar a Interface PostgreSQL.
Saiba mais sobre as diferenças entre os dialetos PostgreSQL e GoogleSQL no Spanner.
Em um nível alto, as etapas são as seguintes:
- As extensões específicas do Spanner foram removidas das consultas e das instruções DDL.
- Migrar o esquema
- Migrar os dados
- Migrar o aplicativo
Considerações específicas do Spanner
Interface PostgreSQL oferece suporte a consultas do PostgreSQL, portanto, a maioria das consultas SQL executadas em um banco de dados do dialeto PostgreSQL do Spanner tem o mesmo comportamento que outros bancos de dados compatíveis com o PostgreSQL. Usando essa abordagem, o número de SQL e mudanças de acesso a dados necessárias para mover um aplicativo de uma plataforma para outra provavelmente é baixo. Isso torna o processo de portabilidade mais rápido, fácil e menos propenso a erros do que um banco de dados semelhante ao GoogleSQL.
Além da ampla compatibilidade com o PostgreSQL, a Interface PostgreSQL oferece várias extensões específicas do Spanner. Se você usar essas extensões nos seus aplicativos, será necessário removê-las ou mapeá-las para recursos do PostgreSQL manualmente. Confira alguns exemplos em Extensões de sintaxe de consulta e Extensões de gerenciamento de esquemas (DDL).
Extensões de sintaxe de consulta
A interface PostgreSQL do Spanner oferece um número
de extensões específicas do Spanner. A maioria usa o prefixo spanner.
para identificação. Na tabela a seguir, listamos essas extensões e as
ações que você pode precisar realizar antes que o mesmo aplicativo possa ser executado em um
banco de dados PostgreSQL.
Tipo de extensão | Extensões específicas | Ações a serem tomadas antes da migração |
Funções específicas do Spanner |
|
Encontre funções com prefixo spanner. e remova essas chamadas.
|
Extensões de tipo |
|
Remova a sintaxe VECTOR LENGTH ou use
pgvector.
|
Sintaxe das consultas | Nenhuma ação é necessária, porque as dicas são representadas nos comentários.
Para detalhes sobre as considerações de desempenho, consulte Migração de consulta. |
|
Procedimentos do sistema armazenados | Remova as chamadas para spanner.cancel_query() .
Se preferir, substitua as chamadas por um equivalente do PostgreSQL. |
|
Operações SET/SHOW | Pode ser ignorado, porque o PostgreSQL não tem parâmetros
integrados que começam com spanner. . Portanto, definir variáveis
com esse prefixo não tem nenhum impacto no comportamento esperado. |
Extensões de gerenciamento de esquema (DDL)
O Spanner oferece várias extensões relacionadas ao gerenciamento de dados, conforme descrito na página linguagem de definição de dados (DDL).
Extensão | Ações a serem tomadas antes da migração |
Tabelas intercaladas
Co-localiza dados relacionados de muitos para um no armazenamento físico, tornando as mesclagens muito mais eficientes. |
Remova a cláusula INTERLEAVE IN . |
Carimbos de data/hora de confirmação
Permite armazenar de maneira atômica o carimbo de data/hora de confirmação de uma transação em uma coluna. |
Substitua SPANNER.COMMIT_TIMESTAMP por um tipo de carimbo de data/hora do PostgreSQL e gerencie a configuração do carimbo de data/hora no seu aplicativo ou remova essa coluna.
|
Recuperação pontual
Oferece proteção contra exclusão ou gravações acidentais. |
Remova todas as instruções DDL que definem
spanner.version_retention_period .
|
Time to live (TTL)
Solicita a exclusão automática de registros com base na idade. |
Remova a cláusula TTL INTERVAL . Use uma
cron ou uma tarefa programada para excluir periodicamente os desatualizados.
linhas.
|
Opções do otimizador
Define opções para minimizar qualquer potencial de regressão de desempenho quando o otimizador de consulta ou as estatísticas mudam. |
Remova as instruções DDL que definem as opções do otimizador. |
Fluxos de alterações
Monitora e transmite as mudanças de dados de um banco de dados do Spanner (inserções, atualizações e exclusões) quase em tempo real. |
Remova todas as instruções DDL relacionadas a fluxo de alterações. |
Líder padrão
Permite especificar o líder do banco de dados em configurações duplas e multirregionais. |
Remova todas as instruções DDL que definem spanner.default_leader .
|
Particionamento geográfico
Permite segmentar e armazenar linhas na tabela do banco de dados em diferentes configurações de instância. |
Remova todas as instruções DDL relacionadas à particionamento geográfico. |
Sequências
O Spanner oferece suporte apenas à sequência bit_reversed_positive . |
Substitua bit_reversed_positive por uma sequência disponível no
PostgreSQL. |
Migração de esquema..
É possível exportar um esquema de banco de dados do dialeto PostgreSQL na sintaxe do PostgreSQL. Para bancos de dados
configurados para usar a Interface PostgreSQL, é possível fazer isso
com psql
usando o PGAdapter, o proxy sidecar que
permite usar drivers padrão do PostgreSQL ou bibliotecas de cliente para se conectar
ao Spanner:
psql -v ON_ERROR_STOP=1 \
--host "$PGADAPTER_HOST" \
--port "$PGADAPTER_PORT" \
--dbname "$SPANNER_DATABASE" \
-qAtX \
-c "show database ddl"
Também é possível usar o comando gcloud
abaixo para gerar o esquema como um script SQL compatível com PostgreSQL:
gcloud spanner databases ddl describe databasename
Se o banco de dados usar extensões de esquema específicas do Spanner, como aquelas discutidas em Extensões de gerenciamento de esquema, elas serão listadas quando você executar esse comando. Você precisa removê-los antes de migrar o esquema para o PostgreSQL.
Migração de dados
Interface PostgreSQL do Spanner oferece suporte às extensões COPY TO STDIN
e STDOUT
do PostgreSQL usando o PGAdapter. Essa é uma maneira de carregar dados para dentro e para fora do
Spanner. Leia mais sobre o comando COPY
na
documentação da ferramenta de linha de comando psql para Spanner.
Este script exporta quantidades menores de dados (recomendado para menos de 100 GB de dados) da Interface PostgreSQL do Spanner para o novo banco de dados do PostgreSQL:
psql -h pgadapter-host -c "COPY $TABLE TO STDOUT BINARY" | \
psql -h postgresql-host -c "COPY $TABLE FROM STDIN BINARY"
Para tabelas maiores (maiores ou iguais a 100 GB de dados), inicie uma exportação do Dataflow para um modelo CSV.
É possível realizar migrações de dados em tempo real usando o conector Debezium Kafka para fazer streaming de atualizações do Spanner no PostgreSQL. É possível personalizar ainda mais se você usar a API Spanner Change Streams para acessar diretamente os streams de captura de dados alterados (CDC).
Migração de consultas
A interface PostgreSQL para o Spanner implementa grande parte da sintaxe, das funções e dos operadores de consulta do PostgreSQL mais comuns.
Se você estiver usando dicas nas consultas, não será necessário reescrevê-las, porque as dicas de consulta no Spanner são definidas em comentários compatíveis com o PostgreSQL:
SELECT s.FirstName, s.LastName,
s.SingerInfo, a.AlbumTitle, a.Charts
FROM Singers AS s
LEFT OUTER JOIN/*@JOIN_METHOD=APPLY_JOIN*/ Albums AS a
ON s.SingerId = a.SingerId;
Esses comentários são processados pelo planejador de consultas do Spanner, mas um banco de dados do PostgreSQL os ignora. Portanto, você pode incluí-los ou retirá-los.
Para alcançar o desempenho ideal no novo ambiente, as consultas e o esquema do banco de dados (como índices) podem precisar de otimização para o novo ambiente. Recomendamos que você execute verificações de comparativos de mercado para confirmar isso empiricamente.
Migração de aplicativos
Quando se trata de conectividade dos seus aplicativos, a estratégia de migração depende das escolhas iniciais feitas ao configurar o aplicativo para usar o Spanner, como se você usa drivers do PostgreSQL, drivers do Spanner ou bibliotecas de cliente do Spanner. Esta seção descreve as considerações para cada opção.
Drivers do PostgreSQL
O Spanner oferece suporte a clientes comuns do PostgreSQL usando o PGAdapter, um proxy leve que converte o protocolo de rede do PostgreSQL em APIs de consulta de gRPC de baixo nível do Spanner. Se você estiver usando um deles, a mudança para um destino do PostgreSQL diferente envolve atualizar a string de conexão para apontar diretamente para o novo banco de dados do PostgreSQL em vez do proxy do PGAdapter. Essa abordagem oferece bom desempenho e compatibilidade, então é uma boa opção quando a portabilidade é uma das principais preocupações. A maioria das consultas executadas na Interface PostgreSQL do Spanner funciona da mesma forma em outros ambientes do PostgreSQL. No entanto, o oposto não é necessariamente verdadeiro. O PostgreSQL oferece suporte a sintaxe e recursos que o Spanner não oferece.
Drivers do Spanner
Esses drivers são implementações específicas do Spanner para linguagens comuns e frameworks de aplicativos. Por exemplo, o driver JDBC do Spanner (Java) implementa a mesma API que o driver JDBC do PostgreSQL. Assim, os aplicativos que usam o driver JDBC do Spanner podem atualizar o processo de build para vincular o driver PostgreSQL integrado equivalente quando quiserem executar o aplicativo com o PostgreSQL. Essa opção é a melhor se você já usa o Spanner ou se está procurando uma solução de alto desempenho que aproveite os recursos do Spanner, como a API Mutations, que não seria exposta usando um driver PostgreSQL integrado. Se você precisar de compatibilidade total com drivers integrados e valorize a portabilidade, use os drivers integrados do PostgreSQL com o PGAdapter para garantir algum nível de portabilidade do aplicativo.
Para mais informações, consulte Drivers e ORMs do PostgreSQL.
Bibliotecas de cliente do Spanner
O Spanner também oferece várias bibliotecas de cliente idiomatic que fornecem acesso direto ao Spanner sem implementar ou passar por uma interface padronizada do PostgreSQL. Esses clientes oferecem acesso máximo a recursos específicos do Spanner, mas não são compatíveis com a API dos drivers do PostgreSQL. Essas opções oferecem o nível mais alto de desempenho do recurso, mas são menos portáteis do que as opções mencionadas.
A seguir
- Saiba como escolher entre PostgreSQL e GoogleSQL.
- Siga o guia de início rápido para criar e interagir com um banco de dados do PostgreSQL.
- Saiba mais sobre o suporte à linguagem PostgreSQL do Spanner.
- Saiba mais sobre o PGAdapter.
- Saiba mais sobre o repositório do GitHub do PGAdapter.
- Consulte os problemas conhecidos na Interface PostgreSQL.