本頁面說明如何將 PGAdapter 連結至 Spanner 模擬器。模擬器會在本機執行,您可以使用它開發及測試應用程式,而無須建立Google Cloud 專案或帳單帳戶。由於模擬器只會在記憶體中儲存資料,因此重新啟動時,所有狀態 (包括資料、結構定義和設定) 都會遺失。模擬器提供的 API 與 Spanner 正式版服務相同,適用於本機開發和測試,而非正式部署。
您可以透過三種方式將 PGAdapter 連線至模擬器:
- 使用 PGAdapter 和模擬器執行預先建構的結合式 Docker 容器。
- 在本機電腦上同時執行模擬器和 PGAdapter。
- 在 Docker 網路中同時執行模擬器和 PGAdapter。
結合 Docker 容器
執行預先建構的 Docker 映像檔,其中包含 PGAdapter 和模擬器。Docker 容器中的 PGAdapter 例項會自動設定連線至容器中的模擬器。
使用下列指令啟動 Docker 容器。
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
啟動容器時,您不需要指定專案、執行個體或資料庫名稱。根據預設,系統會使用專案名稱 emulator-project
和執行個體名稱 test-instance
。您連線的任何資料庫都會由 PGAdapter 自動建立。
您可以使用下列指令,連線至 PGAdapter,並透過 psql
執行陳述式。
psql -h localhost -p 5432 -d test-database
系統會自動建立資料庫 test-database
。執行下列陳述式,確認您已連線至 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;
您也可以直接連線至 Docker 容器中的模擬器,例如使用 gcloud CLI。
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"
在本機電腦上執行模擬器和 PGAdapter
您可以在本機電腦上執行模擬器和 PGAdapter,並使用下列指令將 PGAdapter 連線至模擬器。
首先啟動模擬器。
gcloud emulators spanner start
接著啟動 PGAdapter,並將其連結至模擬器。請注意,您必須在本機電腦上以 Java 應用程式形式啟動 PGAdapter,才能存取模擬器。如果您在 Docker 容器中啟動 PGAdapter,就無法存取在本機主機上執行的模擬器。
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
用於連線至模擬器的 PGAdapter 額外指令列引數如下:
-c ""
:這會指示 PGAdapter 不要使用任何憑證。-r autoConfigEmulator=true
:這會指示 PGAdapter 連線至localhost:9010
,這是預設的模擬器主機和通訊埠。並指示 PGAdapter 自動建立使用者連線的任何資料庫。也就是說,您不需要先建立資料庫,再連線。
您可以使用下列指令,連線至 PGAdapter,並透過 psql
執行陳述式。
psql -h localhost -p 5432 -d test-database
系統會自動建立資料庫 test-database
。執行下列陳述式,確認您已連線至 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;
在 Docker 網路中執行模擬器和 PGAdapter
您可以在 Docker 網路中執行模擬器和 PGAdapter,並使用下列指令將 PGAdapter 連線至模擬器。
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
PGAdapter 和模擬器會在相同的 Docker 網路中啟動,且 PGAdapter 會設為連線至模擬器。用於連線至模擬器的 PGAdapter 額外命令列引數如下:
-c ""
:這會指示 PGAdapter 不要使用任何憑證。-r autoConfigEmulator=true
:這會指示 PGAdapter 自動建立使用者連線的任何資料庫。也就是說,您不需要先建立資料庫,再連線。-e emulator:9010
:-e
會指定 PGAdapter 應連線的端點。emulator:9010
是同一個 Docker 網路中模擬器的名稱和通訊埠號碼。-x
:允許從本機連線至 PGAdapter。
您可以使用下列指令,連線至 PGAdapter,並透過 psql
執行陳述式。
psql -h localhost -p 5432 -d test-database
系統會自動建立資料庫 test-database
。執行下列陳述式,確認您已連線至 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;
您也可以直接連線至 Docker 網路中的模擬器,例如使用 gcloud CLI。
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"