Interface PostgreSQL para o Spanner

Nesta página, descrevemos a Interface PostgreSQL para o Spanner e seus componentes. Ela fornece orientações sobre como escolher entre PostgreSQL e GoogleSQL, além de práticas recomendadas para adotar e usar a interface PostgreSQL.

A interface PostgreSQL torna os recursos do Spanner (totalmente gerenciado, escala ilimitada, consistência forte, alto desempenho e até 99, 999% de disponibilidade global) acessíveis a partir do ecossistema PostgreSQL de código aberto. Ele inclui um subconjunto principal do dialeto SQL do PostgreSQL, suporte para a ferramenta de linha de comando psql, clientes de linguagem nativa e integração com ferramentas atuais do Google, como o Dataflow. Ao contrário de outros serviços que gerenciam instâncias reais do banco de dados PostgreSQL, o Spanner usa a sintaxe compatível com o PostgreSQL para expor os recursos de escalonamento horizontal atuais. Isso dá familiaridade para desenvolvedores e portabilidade para aplicativos, mas não compatibilidade 100% com o PostgreSQL. Os aplicativos existentes que dependem de recursos do PostgreSQL, como procedimentos armazenados, gatilhos, extensões ou níveis de isolamento configuráveis, exigirão retrabalho para serem executados no Spanner. No entanto, a sintaxe SQL compatível com o Spanner é semanticamente equivalente ao PostgreSQL. Isso significa que os esquemas e as consultas gravados na interface PostgreSQL podem ser facilmente transferidos para outro ambiente do PostgreSQL.

A interface PostgreSQL é compatível com a sintaxe SQL comum do PostgreSQL, incluindo consultas, funções e operadores. Além disso, ele é compatível com muitos tipos de dados, sintaxe DDL e visualizações de esquema de informações. Os aplicativos podem se conectar a um banco de dados do Spanner ativado para interface PostgreSQL usando clientes nativos do Spanner ou o PGAdapter, um proxy leve que implementa o protocolo de transmissão aberto do PostgreSQL. Inicialmente, o suporte ao protocolo de conexão é destinado ao uso com a ferramenta de linha de comando psql.

Os administradores provisionam, gerenciam e monitoram bancos de dados ativados para interface PostgreSQL usando o console, as APIs e as ferramentas atuais do Spanner, como a CLI gcloud. A interface PostgreSQL é configurada por banco de dados no momento da criação. Uma instância do Spanner pode conter bancos de dados de dialeto para interfaces GoogleSQL e PostgreSQL. Como eles compartilham o mesmo mecanismo de banco de dados distribuído subjacente, os dois dialetos de banco de dados têm a mesma escalabilidade, consistência, desempenho e características de segurança.

Componentes da interface do PostgreSQL

A interface PostgreSQL consiste em dois recursos principais: suporte para o dialeto SQL do PostgreSQL e suporte para clientes que se conectam a bancos de dados ativados para a interface PostgreSQL.

Suporte a dialeto SQL do PostgreSQL

A interface PostgreSQL fornece um subconjunto do dialeto SQL do PostgreSQL, incluindo DQL, DML e DDL, além de extensões para oferecer suporte a recursos do Spanner, como tabelas intercaladas e dicas de consulta. Para informações detalhadas sobre o suporte à linguagem PostgreSQL do Spanner, consulte A linguagem PostgreSQL no Spanner.

Suporte ao cliente PostgreSQL

Os desenvolvedores podem conectar os aplicativos a um banco de dados da interface PostgreSQL usando clientes do Spanner de código aberto para ambientes Java, Go, Python, Node.js, Ruby, PHP, C# e C++. Eles também podem usar o driver JDBC de código aberto do Spanner e o driver para o pacote database/sql do Go (links em inglês).

A interface PostgreSQL também é compatível com a ferramenta de linha de comando psql, que é um ambiente interativo para executar consultas, explorar metadados e carregar dados, algo comum em muitos ambientes PostgreSQL. O suporte a psql é ativado pelo PGAdapter, um proxy leve que converte o protocolo de conexão do PostgreSQL na interface gRPC integrada do Spanner, gerenciando conexões e autenticação do IAM para você. Para mais informações, consulte Visão geral do PGAdapter.

Os drivers do driver JDBC do PostgreSQL e do driver pgx do PostgreSQL (links em inglês) também são compatíveis com o PGAdapter. Para uma lista completa de drivers PostgreSQL compatíveis, consulte Drivers e ORMs do PostgreSQL (em inglês).

Escolha entre GoogleSQL e PostgreSQL

Ao criar um banco de dados do Spanner, você pode escolher entre os dialetos GoogleSQL e PostgreSQL. O dialeto determina a sintaxe e a semântica das consultas e dos tipos de dados que seus aplicativos usam, além de como eles se conectam ao banco de dados.

O fator decisivo na escolha de usar o GoogleSQL ou o PostgreSQL para um determinado aplicativo ou projeto deve ser a necessidade e os objetivos comerciais, não o suporte à linguagem SQL para os recursos do Spanner. Os dialetos da linguagem SQL são pares que compartilham as mesmas características em relação aos recursos do Spanner:

  • Ambos são implementados com base na mesma base de armazenamento distribuído e processamento de consultas. Dessa forma, eles compartilham características de desempenho, escalonabilidade, consistência e disponibilidade.
  • Ambos expressam recursos do Spanner por meio de um subconjunto das respectivas construções de linguagem padrão (a ANSI 2001 para um, o PostgreSQL de fato de código aberto para o outro), com extensões adicionadas para oferecer suporte a recursos do Spanner, como tabelas intercaladas e dicas de consulta.
  • Para ambos, você usa as interfaces de gerenciamento do Spanner: o console do Google Cloud, a CLI gcloud e as bibliotecas de cliente do Spanner para automação de DevOps.
  • Para ambos, você usa as interfaces de desenvolvimento de aplicativos do Spanner: as bibliotecas de cliente do Spanner, a REST e as APIs RPC.
  • Para ambos, use os esquemas de sistema INFORMATION_SCHEMA e SPANNER_SYS do Spanner para consultar metadados e estatísticas do banco de dados.

A interface PostgreSQL atual não atinge a paridade total entre os dialetos GoogleSQL e PostgreSQL. No entanto, em longo prazo, determine se quer usar o PostgreSQL ou o GoogleSQL para um determinado aplicativo ou projeto da seguinte maneira:

  • Escolha PostgreSQL se a equipe de desenvolvimento estiver familiarizada com o ecossistema PostgreSQL de código aberto ou se sua organização tiver ou estiver padronizando o uso do PostgreSQL.

  • Escolha GoogleSQL:

    • Se a equipe de desenvolvimento está familiarizada com o GoogleSQL, seja por experiência anterior com o Spanner ou trabalhando com outros bancos de dados do Google Cloud, como BigQuery, que também são compatíveis com o GoogleSQL.
    • Se sua organização estiver padronizando o uso do GoogleSQL ou do padrão ANSI 2011,

Para mais informações, consulte Paridade de dialetos GoogleSQL e PostgreSQL.

Práticas recomendadas para usar a interface do PostgreSQL

Para usar a interface PostgreSQL de forma eficaz, o Google recomenda que você:

  • Use o console do Google Cloud ou a Google Cloud CLI para criar seu banco de dados PostgreSQL em uma instância do Spanner. É possível criar bancos de dados PostgreSQL e GoogleSQL na mesma instância.

  • Use as bibliotecas de cliente do Spanner para conectar aplicativos que acessam seu banco de dados.

  • Use a ferramenta de linha de comando psql pelo proxy PGAdapter para trabalhar de maneira interativa com seu banco de dados. Como alternativa, é possível usar a página Spanner Studio no console do Google Cloud.

A seguir