Connecter psycopg3 à une base de données en dialecte PostgreSQL

Cette page explique comment connecter le pilote psycopg3 PostgreSQL à une base de données avec dialecte PostgreSQL dans Spanner. psycopg3 est un pilote Python pour PostgreSQL.

  1. Vérifiez que PGAdapter s'exécute sur la même machine que l'application qui se connecte à l'aide du pilote psycopg3 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
    

    Pour en savoir plus, consultez Démarrer PGAdapter.

  2. Connectez-vous à PGAdapter à l'aide de 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])
    

    Remplacez les éléments suivants :

    • APPLICATION_HOST : nom d'hôte ou adresse IP de la machine sur laquelle PGAdapter est exécuté. Si vous exécutez le code en local, utilisez localhost.
    • PORT : numéro de port sur lequel PGAdapter est exécuté. Modifiez-le dans la chaîne de connexion si PGAdapter s'exécute sur un port personnalisé. Sinon, utilisez le port par défaut, 5432.

Sockets de domaine Unix

Cette section explique comment utiliser les sockets de domaine Unix pour se connecter à une base de données de dialecte PostgreSQL. Utilisez des sockets de domaine Unix pour obtenir la latence la plus faible possible.

Pour utiliser des sockets de domaine Unix, PGAdapter doit s'exécuter sur le même hôte que l'application cliente.

Vérifiez que le pilote JDBC PostgreSQL est chargé.

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

Remplacez les éléments suivants :

  • /tmp : répertoire de socket de domaine par défaut pour PGAdapter. Vous pouvez le modifier à l'aide de l'argument de ligne de commande -dir.
  • PORT : numéro de port sur lequel PGAdapter est exécuté. Modifiez-le dans la chaîne de connexion si PGAdapter s'exécute sur un port personnalisé. Sinon, utilisez le port par défaut, 5432.

Étapes suivantes