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 Daten nur in Arbeitsspeicher, der gesamte Status, einschließlich Daten, Schema und Konfigurationen, geht beim Neustart verloren. Der Emulator bietet dieselben APIs wie die Spanner-Produktion und ist für die lokale Entwicklung und Tests vorgesehen, nicht für die Produktion. Bereitstellungen.

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 PGAdapter in einem Docker-Netzwerk aus.

Kombinierter Docker-Container

Führen Sie das vordefinierte Docker-Image aus, das sowohl PGAdapter als auch das Emulator. Die PGAdapter-Instanz im Docker-Container ist automatisch konfiguriert, um eine Verbindung zum Emulator im Container herzustellen.

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 Instanzname test-instance. Alle Datenbanken, zu denen Sie eine Verbindung herstellen, werden automatisch von PGAdapter erstellt.

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

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

Die Datenbank test-database wird automatisch erstellt. Diese Anweisungen ausführen So überprüfen Sie, ob eine Verbindung zu einer PostgreSQL-Dialekt-Datenbankdatenbank besteht:

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 zunächst 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 starten nicht auf den Emulator zugreifen können, lokalen Host.

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 "": Damit 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 alle Datenbanken zu erstellen, mit denen ein Nutzer eine Verbindung herstellt. Sie müssen also keine Datenbank erstellen, eine Verbindung 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. Diese Anweisungen ausführen So überprüfen Sie, ob eine Verbindung zu einer PostgreSQL-Dialekt-Datenbankdatenbank besteht:

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ätzliche Befehlszeilenargumente für PGAdapter, die für die Verbindung mit dem Emulatoren 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. Das bedeutet, dass Sie Sie müssen vor dem Herstellen einer Verbindung keine Datenbank erstellen.
  • -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 und zwar 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 auch direkt eine Verbindung zum Emulator im Docker-Netzwerk 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"