Connettere psycopg3 a un database in dialetto PostgreSQL

Questa pagina spiega come connettere il driver PostgreSQL psycopg3 a un database con dialetto PostgreSQL in Spanner. psycopg3 è un driver Python per PostgreSQL.

  1. Verifica che PGAdapter sia in esecuzione sulla stessa macchina dell'applicazione che si connette utilizzando il driver 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
    

    Per ulteriori informazioni, consulta Avvia PGAdapter.

  2. Connettiti a PGAdapter utilizzando 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])
    

    Sostituisci quanto segue:

    • APPLICATION_HOST: il nome host o l'indirizzo IP della macchina in cui è in esecuzione PGAdapter. Se esegui l'app localmente, utilizza localhost.
    • PORT: il numero di porta su cui è in esecuzione PGAdapter. Modifica questa impostazione nella stringa di connessione se PGAdapter è in esecuzione su una porta personalizzata. Altrimenti, utilizza la porta predefinita, 5432.

Socket di dominio Unix

Questa sezione spiega come utilizzare i socket di dominio Unix per connettersi a un database con dialetto PostgreSQL. Utilizza i socket di dominio Unix per la latenza più bassa possibile.

Per utilizzare i socket di dominio Unix, PGAdapter deve essere in esecuzione sullo stesso host dell'applicazione client.

Verifica che il driver JDBC PostgreSQL sia caricato.

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

Sostituisci quanto segue:

  • /tmp: la directory socket di dominio predefinita per PGAdapter. Puoi modificare questa impostazione utilizzando l'argomento della riga di comando -dir.
  • PORT: il numero di porta su cui è in esecuzione PGAdapter. Modifica questa impostazione nella stringa di connessione se PGAdapter è in esecuzione su una porta personalizzata. Altrimenti, utilizza la porta predefinita, 5432.

Passaggi successivi