PGAdapter mit dem Emulator verbinden

Auf dieser Seite wird beschrieben, wie Sie PGAdapter mit dem Spanner-Emulator verbinden. Der Emulator wird lokal ausgeführt und Sie können damit Ihre Anwendungen entwickeln und testen, ohne ein Google Cloud-Projekt oder ein Rechnungskonto erstellen zu müssen. Da der Emulator die Daten nur zwischenspeichert, geht der gesamte Status, einschließlich Daten, Schema und Konfigurationen, beim Neustart verloren. Der Emulator bietet dieselben APIs wie der Spanner-Produktionsdienst und ist für lokale Entwicklung und Tests vorgesehen, nicht für die Produktionsbereitstellung.

Sie haben drei Möglichkeiten, PGAdapter mit dem Emulator zu verbinden:

  • Einen vorkonfigurierten kombinierten Docker-Container mit PGAdapter und dem Emulator ausführen
  • Führen Sie sowohl den Emulator als auch PGAdapter auf Ihrem lokalen Computer aus.
  • Führen Sie sowohl den Emulator als auch den PGAdapter in einem Docker-Netzwerk aus.

Kombinierter Docker-Container

Führen Sie das vorkonfigurierte Docker-Image aus, das sowohl PGAdapter als auch den Emulator enthält. Die PGAdapter-Instanz im Docker-Container wird automatisch für die Verbindung mit dem Emulator im Container konfiguriert.

Starten Sie den Docker-Container mit dem folgenden Befehl.

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

Sie müssen beim Starten des Containers keinen Projekt-, Instanz- oder Datenbanknamen angeben. Standardmäßig werden der Projektname emulator-project und der Instanzname test-instance verwendet. Alle Datenbanken, zu denen Sie eine Verbindung herstellen, werden automatisch von PGAdapter erstellt.

Sie können mit dem folgenden Befehl eine Verbindung zum PGAdapter herstellen und Anweisungen mit psql ausführen.

psql -h localhost -p 5432 -d test-database

Die Datenbank test-database wird automatisch erstellt. Führen Sie diese Anweisungen aus, um zu prüfen, ob Sie mit einer Datenbank mit PostgreSQL-Dialekt verbunden sind:

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;

Sie können auch direkt eine Verbindung zum Emulator im Docker-Container herstellen, z. B. mit der gcloud-Befehlszeile.

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"

Emulator und PGAdapter auf dem lokalen Computer ausführen

Sie können sowohl den Emulator als auch den PGAdapter auf Ihrem lokalen Computer ausführen und den PGAdapter mit den folgenden Befehlen mit dem Emulator verbinden.

Starten Sie zuerst den Emulator.

gcloud emulators spanner start

Starten Sie dann PGAdapter und stellen Sie eine Verbindung zum Emulator her. Sie müssen PGAdapter als Java-Anwendung auf Ihrem lokalen Computer starten, damit es auf den Emulator zugreifen kann. Wenn Sie PGAdapter in einem Docker-Container starten, kann er nicht auf den Emulator zugreifen, der auf Ihrem lokalen Host ausgeführt wird.

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

Die zusätzlichen Befehlszeilenargumente für PGAdapter, die für die Verbindung zum Emulator verwendet werden, sind:

  • -c "": Dadurch wird PGAdapter angewiesen, keine Anmeldedaten zu verwenden.
  • -r autoConfigEmulator=true: Dadurch wird PGAdapter angewiesen, eine Verbindung zu localhost:9010 herzustellen, dem Standardemulatorhost und -port. Außerdem wird PGAdapter angewiesen, automatisch jede Datenbank zu erstellen, mit der ein Nutzer eine Verbindung herstellt. Sie müssen also keine Datenbank erstellen, bevor Sie eine Verbindung dazu herstellen.

Sie können mit dem folgenden Befehl eine Verbindung zum PGAdapter herstellen und Anweisungen mit psql ausführen.

psql -h localhost -p 5432 -d test-database

Die Datenbank test-database wird automatisch erstellt. Führen Sie diese Anweisungen aus, um zu prüfen, ob Sie mit einer Datenbank mit PostgreSQL-Dialekt verbunden sind:

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;

Emulator und PGAdapter in einem Docker-Netzwerk ausführen

Sie können sowohl den Emulator als auch den PGAdapter in einem Docker-Netzwerk ausführen und den PGAdapter mit den folgenden Befehlen mit dem Emulator verbinden.

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

Sowohl PGAdapter als auch der Emulator werden im selben Docker-Netzwerk gestartet und PGAdapter ist so konfiguriert, dass eine Verbindung zum Emulator hergestellt wird. Die zusätzlichen Befehlszeilenargumente für PGAdapter, die zum Herstellen einer Verbindung zum Emulator verwendet werden, sind:

  • -c "": Dadurch wird PGAdapter angewiesen, keine Anmeldedaten zu verwenden.
  • -r autoConfigEmulator=true: Dadurch wird PGAdapter angewiesen, jede Datenbank automatisch zu erstellen, zu der ein Nutzer eine Verbindung herstellt. Sie müssen also keine Datenbank erstellen, bevor Sie eine Verbindung dazu herstellen.
  • -e emulator:9010: -e gibt den Endpunkt an, mit dem PGAdapter eine Verbindung herstellen soll. emulator:9010 ist der Name und die Portnummer des Emulators im selben Docker-Netzwerk.
  • -x: Dadurch sind Verbindungen von Ihrem lokalen Computer zu PGAdapter möglich.

Sie können mit dem folgenden Befehl eine Verbindung zum PGAdapter herstellen und Anweisungen mit psql ausführen.

psql -h localhost -p 5432 -d test-database

Die Datenbank test-database wird automatisch erstellt. Führen Sie diese Anweisungen aus, um zu prüfen, ob Sie mit einer Datenbank mit PostgreSQL-Dialekt verbunden sind:

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;

Sie können sich auch direkt mit dem Emulator im Docker-Netzwerk verbinden, z. B. mit der gcloud-Befehlszeile.

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"