Sair do Nelcota sem dependência da plataforma
Exporte schema, políticas, identidades e arquivos para outro backend. Você precisa de acesso de proprietário, ferramentas PostgreSQL e destino verificado. Metadados do banco são SQL; bytes dos arquivos e segredos do deploy precisam ser exportados separadamente. O tempo depende do tamanho dos dados e da compatibilidade do destino.
Para os comandos Docker abaixo, entre em projects/<name>/ na pasta do host para Compose selecionar esse projeto. Hosts systemd usam ferramentas PostgreSQL nativas. Mantenha dumps, exportações de usuários/hashes de senha, mapeamentos de arquivos e configuração privados.
1. O banco inteiro (schema, dados, políticas, funções e usuários)
docker compose exec -T postgres pg_dump -U postgres -Fc postgres > nelcota.dump
# restore into any Postgres 17+:
pg_restore --no-owner -d "postgres://user@new-host/db" nelcota.dumpOs papéis anon, authenticated, service_role, authenticator e nelcota_auth são globais e não fazem parte do pg_dump. Crie-os primeiro no destino (o arquivo migrations/V1__roles_e_auth.sql faz isso de forma idempotente) ou use pg_restore --no-acl se não for utilizá-los.
2. Só os usuários, com seus hashes
docker compose exec -T postgres psql -U postgres -c "\copy (
SELECT id, email, encrypted_password, email_confirmed_at,
raw_user_meta_data, created_at, last_sign_in_at
FROM auth.users) TO STDOUT WITH CSV HEADER" > users.csvencrypted_password usa o formato PHC padrão do argon2id ($argon2id$v=19$m=19456,t=2,p=1$...). Qualquer biblioteca argon2 verifica esses hashes sem conversão: os usuários não precisam trocar suas senhas. Detalhes em O esquema auth.
3. Os JWTs
O formato está em JWT e papéis. Para trocar de provedor de autenticação sem reescrever as políticas, o novo provedor só precisa emitir tokens com role e sub. As funções auth.uid()/auth.jwt() continuam iguais.
4. Os arquivos
storage.objects faz parte do dump acima. Os bytes são arquivos comuns em projects/<name>/storage/ (disco) ou objetos no seu próprio bucket (S3), armazenados como <bucket>/<version>. O nome de cada arquivo:
docker compose exec -T postgres psql -U postgres -c "\copy (
SELECT bucket_id || '/' || version AS key, bucket_id || '/' || name AS name
FROM storage.objects) TO STDOUT WITH CSV HEADER" > files.csv5. O que fica para trás
Apenas o binário nelcota: a API REST automática e o painel. Sem o Nelcota, o Postgres continua servindo exatamente os mesmos dados com as mesmas políticas, e você pode conectar PostgREST, Hasura ou seu próprio backend a ele.