Halaman ini menunjukkan cara menghubungkan PGAdapter ke emulator Spanner. Emulator berjalan secara lokal, dan Anda dapat menggunakannya untuk mengembangkan dan menguji aplikasi tanpa membuat project Google Cloud atau akun penagihan. Karena emulator hanya menyimpan data dalam memori, semua status, termasuk data, skema, dan konfigurasi, akan hilang saat dimulai ulang. Emulator menawarkan API yang sama dengan layanan produksi Spanner dan ditujukan untuk pengembangan dan pengujian lokal, bukan untuk deployment produksi.
Anda dapat menghubungkan PGAdapter ke emulator dengan tiga cara berbeda:
- Jalankan container Docker gabungan bawaan dengan PGAdapter dan emulator.
- Jalankan emulator dan PGAdapter di komputer lokal Anda.
- Jalankan emulator dan PGAdapter di jaringan Docker.
Container Docker gabungan
Jalankan image Docker bawaan yang berisi PGAdapter dan emulator. Instance PGAdapter dalam penampung Docker otomatis dikonfigurasi untuk terhubung ke emulator dalam penampung.
Mulai container Docker dengan perintah berikut.
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
Anda tidak perlu menentukan nama project, instance, atau database saat memulai penampung. Secara default, nama project emulator-project
dan nama instance test-instance
akan digunakan. Setiap database yang Anda hubungkan akan otomatis
dibuat oleh PGAdapter.
Anda dapat terhubung ke PGAdapter dan menjalankan pernyataan dengan psql
dengan
perintah berikut.
psql -h localhost -p 5432 -d test-database
Database test-database
dibuat secara otomatis. Jalankan pernyataan ini
untuk memverifikasi bahwa Anda terhubung ke database dialek 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;
Anda juga dapat terhubung langsung ke emulator di dalam penampung Docker, misalnya dengan 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"
Menjalankan emulator dan PGAdapter di komputer lokal
Anda dapat menjalankan emulator dan PGAdapter di komputer lokal, dan menghubungkan PGAdapter ke emulator dengan perintah berikut.
Pertama, mulai emulator.
gcloud emulators spanner start
Kemudian, mulai PGAdapter dan hubungkan ke emulator. Perhatikan bahwa Anda harus memulai PGAdapter sebagai aplikasi Java di komputer lokal agar dapat mengakses emulator. Jika Anda memulai PGAdapter dalam penampung Docker, PGAdapter tidak dapat mengakses emulator yang berjalan di host lokal Anda.
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
Argumen command line tambahan untuk PGAdapter yang digunakan untuk terhubung ke emulator adalah:
-c ""
: Tindakan ini akan menginstruksikan PGAdapter untuk tidak menggunakan kredensial apa pun.-r autoConfigEmulator=true
: Tindakan ini akan menginstruksikan PGAdapter untuk terhubung kelocalhost:9010
, yang merupakan host dan port emulator default. Tindakan ini juga menginstruksikan PGAdapter untuk otomatis membuat database apa pun yang terhubung ke pengguna. Artinya, Anda tidak perlu membuat database sebelum menghubungkan ke database tersebut.
Anda dapat terhubung ke PGAdapter dan menjalankan pernyataan dengan psql
dengan
perintah berikut.
psql -h localhost -p 5432 -d test-database
Database test-database
dibuat secara otomatis. Jalankan pernyataan ini
untuk memverifikasi bahwa Anda terhubung ke database dialek 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;
Menjalankan emulator dan PGAdapter di jaringan Docker
Anda dapat menjalankan emulator dan PGAdapter di jaringan Docker dan menghubungkan PGAdapter ke emulator dengan perintah berikut.
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 dan emulator dimulai di jaringan Docker yang sama, dan PGAdapter dikonfigurasi untuk terhubung ke emulator. Argumen command line tambahan untuk PGAdapter yang digunakan untuk terhubung ke emulator adalah:
-c ""
: Tindakan ini akan menginstruksikan PGAdapter untuk tidak menggunakan kredensial apa pun.-r autoConfigEmulator=true
: Tindakan ini akan memerintahkan PGAdapter untuk membuat database apa pun yang terhubung ke pengguna secara otomatis. Artinya, Anda tidak perlu membuat database sebelum terhubung ke database tersebut.-e emulator:9010
:-e
menentukan endpoint yang harus dihubungkan oleh PGAdapter.emulator:9010
adalah nama dan nomor port emulator di jaringan Docker yang sama.-x
: Tindakan ini memungkinkan koneksi ke PGAdapter dari komputer lokal Anda.
Anda dapat terhubung ke PGAdapter dan menjalankan pernyataan dengan psql
dengan
perintah berikut.
psql -h localhost -p 5432 -d test-database
Database test-database
dibuat secara otomatis. Jalankan pernyataan ini
untuk memverifikasi bahwa Anda terhubung ke database dialek 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;
Anda juga dapat terhubung langsung ke emulator di jaringan Docker, misalnya dengan 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"