Ligue o PGAdapter ao emulador

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 a localhost: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"