Backup site associados#

O repositório apyb/associados contém o código fonte do site legado de associados da APyB. Ele é um site Django que rodava no Heroku, mas foi descontinuado em 2025 e hoje todo o gerenciamento de associados é realizado via Stripe.

Caso seja necessário acessar o banco de dados do site legado, o backup mais recente está disponível no cofre. E você pode restaurá-lo localmente seguindo os passos abaixo:

Resumo rápido (TL;DR)

  1. Instale o PostgreSQL (inclui psql e pg_restore).

  2. Crie um banco vazio: createdb associadosdb.

  3. Rode: pg_restore --verbose --clean --no-acl --no-owner -h localhost -d associadosdb backup_banco_associados.dump.

  4. Valide com psql -d associadosdb -c "\dt".


1) Pré‑requisitos#

  • PostgreSQL instalado localmente (versão igual ou mais nova que a do backup para evitar incompatibilidades - Versão 17.4).

    • macOS: brew install postgresql (ou postgresql@<versão>)

    • Ubuntu/Debian: sudo apt-get install postgresql postgresql-client

    • Windows: instalar via PostgreSQL Installer

  • A ferramenta pg_restore (vem junto com a instalação do PostgreSQL).

  • O arquivo backup_banco_associados.dump baixado do Heroku.

  • Acesso ao usuário local do Postgres (ex.: postgres) e sua senha, caso configurada.

Dica: Para conferir sua versão local: psql --version e pg_restore --version.


2) Confirmar integridade (opcional, mas recomendado)#

No mesmo diretório do arquivo de dump (backup_banco_associados.dump):

# macOS/Linux
shasum -a 256 backup_banco_associados.dump

# Windows (PowerShell)
Get-FileHash .\backup_banco_associados.dump -Algorithm SHA256

Guarde o hash junto com o arquivo para auditoria.


3) Criar o banco de destino#

Crie um banco vazio onde o dump será restaurado.

# macOS/Linux
createdb -h localhost -U postgres associadosdb

# Windows (PowerShell / CMD)
createdb -h localhost -U postgres associadosdb

Se preferir criar via psql:

psql -h localhost -U postgres -c "CREATE DATABASE associadosdb;"

Se o usuário pedir senha, informe a senha do usuário do Postgres local (ex.: postgres).


4) Restaurar com pg_restore (formato custom)#

O dump do Heroku normalmente é em formato custom (-Fc), ideal para pg_restore.

Comando recomendado (idempotente, sem restaurar ACLs/donos):

pg_restore \
  --verbose \
  --clean \
  --no-acl \
  --no-owner \
  -h localhost \
  -d associadosdb \
  backup_banco_associados.dump

O que cada flag faz:

  • --verbose: imprime detalhes do progresso

  • --clean: executa DROP antes de CREATE (útil para reimportar no mesmo DB)

  • --no-acl: ignora permissões do dump

  • --no-owner: não tenta recriar donos/roles do Heroku

Se precisar de schema específico: normalmente o Heroku usa public. Se o seu dump tiver outro schema, você pode restringir com -n <schema>.

Se quiser restaurar só uma tabela: liste o conteúdo (pg_restore -l backup_banco_associados.dump > toc.list), edite a lista e use pg_restore -L toc.list ....


O que você pode fazer com o banco restaurado?#

Consultar quando uma pessoa associada entrou na APyB#

Importante

Essa consulta só é válida se a pessoa associada tiver feito ao menos um pagamento registrado no sistema legado da APyB. Caso contrário, deverá ser consultado o sistema atual de associados via Stripe.

Rotineiramente recebemos pedidos de pessoas associadas solicitando um termo que comprove que elas são asssociadas, e nesse termo precisamos informar a data em que a pessoa se associou. Para isso, você pode rodar a seguinte query SQL no banco restaurado, substituindo o placeholder [USER-EMAIL] pelo email da pessoa associada:

SELECT 
  MIN(tb_transaction."date") AS first_payment
FROM (
  SELECT id, email
  FROM public.auth_user
  WHERE email = '[USER-EMAIL]' -- substitua pelo email da pessoa associada
) AS tb_users
LEFT JOIN (
  SELECT id AS member_id, user_id, cpf
  FROM public.members_member
) AS tb_members ON tb_users.id = tb_members.user_id
LEFT JOIN (
  SELECT id AS payment_id, member_id
  FROM public.payment_payment
) AS tb_payment ON tb_members.member_id = tb_payment.member_id
LEFT JOIN (
  SELECT payment_id, date
  FROM public.payment_transaction
) AS tb_transaction ON tb_transaction.payment_id = tb_payment.payment_id