Conectar psycopg3 a um banco de dados do dialeto PostgreSQL

Nesta página, explicamos como conectar o driver psycopg3 do PostgreSQL a um banco de dados com dialeto PostgreSQL no Spanner. psycopg3 é um driver Python para PostgreSQL.

  1. Verifique se o PGAdapter está em execução na mesma máquina que o aplicativo que está se conectando usando o driver psycopg3 do PostgreSQL.

    export GOOGLE_APPLICATION_CREDENTIALS=/CREDENTIALS_FILE_PATH/credentials.json
    docker pull gcr.io/cloud-spanner-pg-adapter/pgadapter
    docker run \
      -d -p 5432:5432 \
      -v ${GOOGLE_APPLICATION_CREDENTIALS}:${GOOGLE_APPLICATION_CREDENTIALS}:ro \
      -e GOOGLE_APPLICATION_CREDENTIALS \
      gcr.io/cloud-spanner-pg-adapter/pgadapter \
      -p PROJECT_NAME -i INSTANCE_NAME \
      -x
    

    Para mais informações, consulte Iniciar o PGAdapter.

  2. Conecte-se ao PGAdapter usando TCP.

    import psycopg
    
    with psycopg.connect("host=APPLICATION_HOST port=PORT dbname=DATABASE_NAME sslmode=disable") as conn:
      conn.autocommit = True
      with conn.cursor() as cur:
        cur.execute("select 'Hello world!' as hello")
        print("Greeting from Cloud Spanner PostgreSQL:", cur.fetchone()[0])
    

    Substitua:

    • APPLICATION_HOST: o nome do host ou endereço IP da máquina em que o PGAdapter está sendo executado. Se você estiver executando localmente, use localhost.
    • PORT: o número da porta em que o PGAdapter está em execução. Mude isso na string de conexão se o PGAdapter estiver sendo executado em uma porta personalizada. Caso contrário, use a porta padrão, 5432.

Soquetes de domínio Unix

Nesta seção, explicamos como usar soquetes de domínio Unix para se conectar a um banco de dados de dialeto PostgreSQL. Use soquetes de domínio Unix para ter a menor latência possível.

Para usar soquetes de domínio Unix, o PGAdapter precisa estar em execução no mesmo host que o aplicativo cliente.

Verifique se o driver JDBC do PostgreSQL foi carregado.

import psycopg

with psycopg.connect("host=/tmp
                      port=PORT
                      dbname=DATABASE_NAME") as conn:
conn.autocommit = True
with conn.cursor() as cur:
  cur.execute("select 'Hello world!' as hello")
  print("Greetings from Cloud Spanner PostgreSQL:", cur.fetchone()[0])

Substitua:

  • /tmp: o diretório de soquete de domínio padrão para PGAdapter. Isso pode ser mudado usando o argumento de linha de comando -dir.
  • PORT: o número da porta em que o PGAdapter está em execução. Mude isso na string de conexão se o PGAdapter estiver sendo executado em uma porta personalizada. Caso contrário, use a porta padrão, 5432.

A seguir