Esta página mostra como ligar o PGAdapter ao emulador do Spanner. O emulador é executado localmente e pode usá-lo para desenvolver e testar as suas aplicações sem criar umGoogle Cloud projeto ou uma conta de faturação. Uma vez que o emulador armazena dados apenas na memória, todo o estado, incluindo dados, esquema e configurações, é perdido no reinício. O emulador oferece as mesmas APIs que o serviço de produção do Spanner e destina-se ao desenvolvimento e aos testes locais, não a implementações de produção.
Pode ligar o PGAdapter ao emulador de três formas diferentes:
- Execute um contentor do Docker combinado pré-criado com o PGAdapter e o emulador.
- Execute o emulador e o PGAdapter na sua máquina local.
- Execute o emulador e o PGAdapter numa rede Docker.
Contentor Docker combinado
Execute a imagem Docker pré-criada que contém o PGAdapter e o emulador. A instância do PGAdapter no contentor do Docker é configurada automaticamente para estabelecer ligação ao emulador no contentor.
Inicie o contentor Docker com o seguinte 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
Não tem de especificar um projeto, uma instância nem um nome da base de dados quando inicia o contentor. Por predefinição, usa o nome do projeto emulator-project
e o nome da instância test-instance
. Qualquer base de dados à qual se ligue é criada automaticamente pelo PGAdapter.
Pode estabelecer ligação ao PGAdapter e executar declarações com psql
com o seguinte comando.
psql -h localhost -p 5432 -d test-database
A base de dados test-database
é criada automaticamente. Execute estas declarações para verificar se tem ligação a uma base de dados com dialeto 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;
Também pode estabelecer ligação diretamente ao emulador no contentor Docker, por exemplo, com a CLI 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"
Execute o emulador e o PGAdapter na sua máquina local
Pode executar o emulador e o PGAdapter na sua máquina local e ligar o PGAdapter ao emulador com os seguintes comandos.
Primeiro, inicie o emulador.
gcloud emulators spanner start
Em seguida, inicie o PGAdapter e ligue-o ao emulador. Tenha em atenção que tem de iniciar o PGAdapter como uma aplicação Java na sua máquina local para poder aceder ao emulador. Se iniciar o PGAdapter num contentor do Docker, não consegue aceder ao emulador que está a ser executado no seu anfitrião local.
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
Os argumentos adicionais da linha de comandos para o PGAdapter que são usados para se ligar ao emulador são:
-c ""
: isto indica ao PGAdapter para não usar credenciais.-r autoConfigEmulator=true
: isto indica ao PGAdapter que se ligue alocalhost:9010
, que é o anfitrião e a porta do emulador predefinidos. Também indica ao PGAdapter para criar automaticamente qualquer base de dados à qual um utilizador se ligue. Isto significa que não tem de criar uma base de dados antes de se ligar à mesma.
Pode estabelecer ligação ao PGAdapter e executar declarações com psql
com o seguinte comando.
psql -h localhost -p 5432 -d test-database
A base de dados test-database
é criada automaticamente. Execute estas declarações para verificar se tem ligação a uma base de dados com dialeto 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;
Execute o emulador e o PGAdapter numa rede Docker
Pode executar o emulador e o PGAdapter numa rede Docker e ligar o PGAdapter ao emulador com os seguintes comandos.
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
O PGAdapter e o emulador são iniciados na mesma rede Docker e o PGAdapter está configurado para estabelecer ligação ao emulador. Os argumentos adicionais da linha de comandos para o PGAdapter que são usados para estabelecer ligação ao emulador são:
-c ""
: isto indica ao PGAdapter para não usar credenciais.-r autoConfigEmulator=true
: isto indica ao PGAdapter que deve criar automaticamente qualquer base de dados à qual um utilizador se ligue. Isto significa que não precisa de criar uma base de dados antes de se ligar à mesma.-e emulator:9010
:-e
especifica o ponto final ao qual o PGAdapter se deve ligar.emulator:9010
é o nome e o número da porta do emulador na mesma rede Docker.-x
: isto permite ligações ao PGAdapter a partir do seu computador local.
Pode estabelecer ligação ao PGAdapter e executar declarações com psql
com o seguinte comando.
psql -h localhost -p 5432 -d test-database
A base de dados test-database
é criada automaticamente. Execute estas declarações para verificar se tem ligação a uma base de dados com dialeto 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;
Também pode estabelecer ligação diretamente ao emulador na rede Docker, por exemplo, com a CLI 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"