psycopg3 mit einer Datenbank im PostgreSQL-Dialekt verbinden

Auf dieser Seite wird erläutert, wie Sie den PostgreSQL-Treiber psycopg3 mit einer Datenbank mit 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 über den 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. Verbindung zu PGAdapter über TCP herstellen

    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, unter der PGAdapter ausgeführt wird. Ändern Sie dies im Verbindungsstring, wenn PGAdapter auf einem benutzerdefinierten Port ausgeführt wird. Verwenden Sie andernfalls den Standardport 5432.

Unix Domain Sockets

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

Wenn Sie Unix-Domain-Sockets verwenden möchten, 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 -dir-Befehlszeilenargument geändert werden.
  • PORT: Die Portnummer, unter der PGAdapter ausgeführt wird. Ändern Sie dies im Verbindungsstring, 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 GitHub-Repository für PGAdapter unter psycopg3 Connection Options.