Conecta psycopg3 a una base de datos de dialecto de PostgreSQL

En esta página, se explica cómo conectar el controlador psycopg3 de PostgreSQL a una base de datos con dialecto de PostgreSQL en Spanner. psycopg3 es un controlador de Python para PostgreSQL.

  1. Verifica que PGAdapter se ejecute en la misma máquina que la aplicación que se conecta con el controlador psycopg3 de 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 obtener más información, consulta Cómo iniciar PGAdapter.

  2. Conéctate a PGAdapter con 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])
    

    Reemplaza lo siguiente:

    • APPLICATION_HOST: Es el nombre de host o la dirección IP de la máquina en la que se ejecuta PGAdapter. Si ejecutas el código de forma local, usa localhost.
    • PORT: Es el número de puerto en el que se ejecuta PGAdapter. Cambia esto en la cadena de conexión si PGAdapter se ejecuta en un puerto personalizado. De lo contrario, usa el puerto predeterminado, 5432.

Sockets de dominio Unix

En esta sección, se explica cómo usar sockets de dominio Unix para conectarse a una base de datos de dialecto PostgreSQL. Usa sockets de dominio Unix para obtener la menor latencia posible.

Para usar sockets de dominio Unix, PGAdapter debe ejecutarse en el mismo host que la aplicación cliente.

Verifica que el controlador JDBC de PostgreSQL esté cargado.

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])

Reemplaza lo siguiente:

  • /tmp: Es el directorio de sockets de dominio predeterminado para PGAdapter. Esto se puede cambiar con el argumento de línea de comandos -dir.
  • PORT: Es el número de puerto en el que se ejecuta PGAdapter. Cambia esto en la cadena de conexión si PGAdapter se ejecuta en un puerto personalizado. De lo contrario, usa el puerto predeterminado, 5432.

¿Qué sigue?

  • Obtén más información sobre PGAdapter.
  • Para obtener más información sobre las opciones de conexión del controlador psycopg3 de PostgreSQL, consulta Opciones de conexión de psycopg3 en el repositorio de GitHub de PGAdapter.