Questa pagina mostra come collegare PGAdapter all'emulatore Spanner. L'emulatore viene eseguito localmente e puoi usarlo per sviluppare e testare le tue applicazioni senza creare un progetto Google Cloud o un account di fatturazione. Poiché l'emulatore memorizza i dati solo in memoria, tutto lo stato, inclusi dati, schema e configurazioni, viene perso al riavvio. L'emulatore offre le stesse API del servizio di produzione Spanner ed è progettato per lo sviluppo e i test locali, non per i deployment di produzione.
Puoi collegare PGAdapter all'emulatore in tre modi diversi:
- Esegui un container Docker combinato predefinito con PGAdapter e l'emulatore.
- Esegui sia l'emulatore che PGAdapter sulla tua macchina locale.
- Esegui sia l'emulatore che PGAdapter in una rete Docker.
Container Docker combinato
Esegui l'immagine Docker predefinita che contiene sia PGAdapter sia l'emulatore. L'istanza PGAdapter nel contenitore Docker viene configurata automaticamente per connettersi all'emulatore nel contenitore.
Avvia il container Docker con il seguente comando.
docker pull gcr.io/cloud-spanner-pg-adapter/pgadapter-emulator
docker run -d \
-p 5432:5432 \
-p 9010:9010 \
-p 9020:9020 \
gcr.io/cloud-spanner-pg-adapter/pgadapter-emulator
Non è necessario specificare un nome di progetto, istanza o database quando si avvia il contenitore. Per impostazione predefinita verranno utilizzati il nome del progetto emulator-project
e il nome dell'istanza test-instance
. Qualsiasi database a cui ti colleghi viene creato automaticamente da PGAdapter.
Puoi connetterti a PGAdapter ed eseguire istruzioni con psql
con
il seguente comando.
psql -h localhost -p 5432 -d test-database
Il database test-database
viene creato automaticamente. Esegui queste istruzioni
per verificare di essere connesso a un database in dialetto PostgreSQL:
create table my_table (
id bigint not null primary key,
value varchar
);
insert into my_table (id, value) values (1, 'One');
select * from my_table;
Puoi anche connetterti direttamente all'emulatore all'interno del contenitore Docker, ad esempio con l'interfaccia a riga di comando gcloud.
gcloud config configurations create emulator
gcloud config set auth/disable_credentials true
gcloud config set project emulator-project
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
gcloud spanner instances list
gcloud spanner databases execute-sql test-database \
--instance=test-instance \
--sql="select * from my_table"
Esegui l'emulatore e PGAdapter sulla tua macchina locale
Puoi eseguire sia l'emulatore che PGAdapter sulla tua macchina locale e collegare PGAdapter all'emulatore con i seguenti comandi.
Per prima cosa, avvia l'emulatore.
gcloud emulators spanner start
Quindi avvia PGAdapter e connettilo all'emulatore. Tieni presente che devi avviare PGAdapter come applicazione Java sulla tua macchina locale affinché possa accedere all'emulatore. Se avvii PGAdapter in un container Docker, il container non potrà accedere all'emulatore in esecuzione sull'host locale.
wget https://storage.googleapis.com/pgadapter-jar-releases/pgadapter.tar.gz \
&& tar -xzvf pgadapter.tar.gz
java -jar pgadapter.jar -p emulator-project -i test-instance \
-c "" \
-r autoConfigEmulator=true
Gli argomenti della riga di comando aggiuntivi per PGAdapter utilizzati per collegarsi all'emulatore sono:
-c ""
: questo indica a PGAdapter di non utilizzare alcuna credenziale.-r autoConfigEmulator=true
: questo comando indica a PGAdapter di connettersi alocalhost:9010
, che è l'host e la porta dell'emulatore predefiniti. Inoltre, invita PGAdapter a creare automaticamente qualsiasi database a cui un utente si connette. Ciò significa che non devi creare un database prima di collegarti.
Puoi connetterti a PGAdapter ed eseguire istruzioni con psql
con
il seguente comando.
psql -h localhost -p 5432 -d test-database
Il database test-database
viene creato automaticamente. Esegui queste istruzioni
per verificare di essere connesso a un database in dialetto PostgreSQL:
create table my_table (
id bigint not null primary key,
value varchar
);
insert into my_table (id, value) values (1, 'One');
select * from my_table;
Esegui l'emulatore e PGAdapter in una rete Docker
Puoi eseguire sia l'emulatore sia PGAdapter in una rete Docker e collegare PGAdapter all'emulatore con i seguenti comandi.
cat <<EOT > docker-compose.yml
version: "3.9"
services:
emulator:
image: "gcr.io/cloud-spanner-emulator/emulator"
pull_policy: always
container_name: spanner-emulator
ports:
- "9010:9010"
- "9020:9020"
pgadapter:
depends_on:
emulator:
condition: service_started
image: "gcr.io/cloud-spanner-pg-adapter/pgadapter"
pull_policy: always
container_name: pgadapter-connected-to-emulator
command:
- "-p emulator-project"
- "-i test-instance"
- "-r autoConfigEmulator=true"
- "-e emulator:9010"
- "-c \"\""
- "-x"
ports:
- "5432:5432"
EOT
docker compose up -d
Sia PGAdapter sia l'emulatore vengono avviati nella stessa rete Docker e PGAdapter è configurato per connettersi all'emulatore. Gli argomenti della riga di comando aggiuntivi per PGAdapter utilizzati per connettersi all'emulatore sono:
-c ""
: questo indica a PGAdapter di non utilizzare alcuna credenziale.-r autoConfigEmulator=true
: indica a PGAdapter di creare automaticamente qualsiasi database a cui un utente si connette. Ciò significa che non è necessario creare un database prima di connettersi.-e emulator:9010
:-e
specifica l'endpoint a cui deve collegarsi PGAdapter.emulator:9010
è il nome e il numero di porta dell'emulatore nella stessa rete Docker.-x
: consente le connessioni a PGAdapter dalla tua macchina locale.
Puoi connetterti a PGAdapter ed eseguire istruzioni con psql
con
il seguente comando.
psql -h localhost -p 5432 -d test-database
Il database test-database
viene creato automaticamente. Esegui queste istruzioni
per verificare di essere connesso a un database in dialetto PostgreSQL:
create table my_table (
id bigint not null primary key,
value varchar
);
insert into my_table (id, value) values (1, 'One');
select * from my_table;
Puoi anche connetterti direttamente all'emulatore nella rete Docker, ad esempio con l'interfaccia a riga di comando gcloud.
gcloud config configurations create emulator
gcloud config set auth/disable_credentials true
gcloud config set project emulator-project
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
gcloud spanner instances list
gcloud spanner databases execute-sql test-database \
--instance=test-instance \
--sql="select * from my_table"