psycopg3 mit einer Datenbank im PostgreSQL-Dialekt verbinden

Auf dieser Seite wird erläutert, wie Sie den PostgreSQL-Treiber `psycopg3` mit einer Datenbank im PostgreSQL-Dialekt in Spanner verbinden. psycopg3 ist ein Python-Treiber für PostgreSQL.

  1. Prüfen Sie, ob PGAdapter auf demselben Computer wie die Anwendung ausgeführt wird, die eine Verbindung mit dem PostgreSQL-Treiber `psycopg3` herstellt.

    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
    

    Weitere Informationen finden Sie unter PGAdapter starten.

  2. Stellen Sie über TCP eine Verbindung zu PGAdapter her.

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

    Ersetzen Sie Folgendes:

    • APPLICATION_HOST: Der Hostname oder die IP-Adresse des Computers, auf dem PGAdapter ausgeführt wird. Bei einer lokalen Ausführung verwenden Sie localhost.
    • PORT: Die Portnummer, auf der PGAdapter ausgeführt wird. Ändern Sie diese in der Verbindungs-URL, wenn PGAdapter auf einem benutzerdefinierten Port ausgeführt wird. Verwenden Sie andernfalls den Standardport 5432.

Unix Domain Sockets

In diesem Abschnitt wird erläutert, wie Sie Unix Domain Sockets verwenden, um eine Verbindung zu einer Datenbank im PostgreSQL-Dialekt herzustellen. Verwenden Sie Unix Domain Sockets, um die Latenz so gering wie möglich zu halten.

Damit Sie Unix Domain Sockets verwenden können, muss PGAdapter auf demselben Host wie die Clientanwendung ausgeführt werden.

Prüfen Sie, ob der PostgreSQL-JDBC-Treiber geladen ist.

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

Ersetzen Sie Folgendes:

  • /tmp: Das Standardverzeichnis für Domain Sockets für PGAdapter. Dies kann mit dem Befehlszeilenargument -dir geändert werden.
  • PORT: Die Portnummer, auf der PGAdapter ausgeführt wird. Ändern Sie diese in der Verbindungs-URL, wenn PGAdapter auf einem benutzerdefinierten Port ausgeführt wird. Verwenden Sie andernfalls den Standardport 5432.

Nächste Schritte

  • Weitere Informationen zu PGAdapter.
  • Weitere Informationen zu den Verbindungsoptionen für den PostgreSQL-Treiber `psycopg3` finden Sie im PGAdapter-GitHub-Repository unter siehe psycopg3 Connection Options.
  • Übersicht der für Spanner unterstützten Treiber und ORMs.