Achado e descrito por @ygorebos, instalando numa VPS com Supabase self-hosted. Ele o deixou
registrado como fora do escopo do PR #188; eu confirmei no código da main 9249e6f e abro aqui
para não se perder — o fork dele foi apagado e o PR fechou junto.
O que ele descreveu
install.sh e update.sh usam o mesmo SUPABASE_DB_URL para instalar schema e para o app rodar.
São necessidades diferentes: create extension e o baseline.sql exigem o dono do banco, enquanto
o app quer a role menor. Num Supabase da nuvem isso não aparece porque a connection string do
pooler já é privilegiada; self-hosted obriga a trocar a role antes e depois, na mão.
Confirmado no código
Uma variável, dois papéis:
| papel |
onde |
DDL — aplica baseline.sql, cria extensões, promove o dono |
install.sh:1175, :1190, :1196, :1208, :1218, :1243; update.sh:129, :134 |
runtime do app — vai para o .env que os contêineres leem |
install.sh:1067 (envq SUPABASE_DB_URL "$SUPABASE_DB_URL") |
E o projeto já recomenda a separação em outro lugar — docs/deploy-selfhost/README.md:76:
Crie também a role dedicada do worker (mais seguro que usar o superusuário):
create role agent_worker login password 'TROQUE-ESTA-SENHA' bypassrls;
Então a doutrina escrita e o instalador discordam: o doc manda separar, o install.sh não tem onde
receber a segunda role.
Por que não aparece na nuvem
Na nuvem a connection string do Session pooler já é postgres.<ref>, privilegiada o bastante para as
duas coisas. O acoplamento existe lá também — só não dói. Num Supabase próprio, dói na primeira
instalação, e a saída hoje é editar o .env na mão entre uma etapa e outra.
Encaminhamento sugerido (não é decisão minha)
Duas variáveis, com a de DDL sendo opcional e caindo na outra quando ausente — assim a nuvem não muda
nada e o self-host ganha o encaixe:
SUPABASE_DB_URL — a do app (a role menor)
SUPABASE_DB_ADMIN_URL — a do schema; se vazia, usa a de cima
Se for por aí: a var nova entra em .env.example e em lib/env.ts como opcional (§5 do
complemento-do-ci.md), e o update.sh precisa da mesma distinção — ele reaplica o baseline.sql.
NÃO MEDIDO
Não instalei numa VPS com Supabase self-hosted para ver a falha acontecer. O que eu confirmei foi o
acoplamento no código e a recomendação conflitante no doc; o relato da falha em campo é do @ygorebos.
Achado e descrito por @ygorebos, instalando numa VPS com Supabase self-hosted. Ele o deixou
registrado como fora do escopo do PR #188; eu confirmei no código da
main9249e6f e abro aquipara não se perder — o fork dele foi apagado e o PR fechou junto.
O que ele descreveu
Confirmado no código
Uma variável, dois papéis:
baseline.sql, cria extensões, promove o donoinstall.sh:1175,:1190,:1196,:1208,:1218,:1243;update.sh:129,:134.envque os contêineres leeminstall.sh:1067(envq SUPABASE_DB_URL "$SUPABASE_DB_URL")E o projeto já recomenda a separação em outro lugar —
docs/deploy-selfhost/README.md:76:Então a doutrina escrita e o instalador discordam: o doc manda separar, o
install.shnão tem ondereceber a segunda role.
Por que não aparece na nuvem
Na nuvem a connection string do Session pooler já é
postgres.<ref>, privilegiada o bastante para asduas coisas. O acoplamento existe lá também — só não dói. Num Supabase próprio, dói na primeira
instalação, e a saída hoje é editar o
.envna mão entre uma etapa e outra.Encaminhamento sugerido (não é decisão minha)
Duas variáveis, com a de DDL sendo opcional e caindo na outra quando ausente — assim a nuvem não muda
nada e o self-host ganha o encaixe:
SUPABASE_DB_URL— a do app (a role menor)SUPABASE_DB_ADMIN_URL— a do schema; se vazia, usa a de cimaSe for por aí: a var nova entra em
.env.examplee emlib/env.tscomo opcional (§5 docomplemento-do-ci.md), e oupdate.shprecisa da mesma distinção — ele reaplica obaseline.sql.NÃO MEDIDO
Não instalei numa VPS com Supabase self-hosted para ver a falha acontecer. O que eu confirmei foi o
acoplamento no código e a recomendação conflitante no doc; o relato da falha em campo é do @ygorebos.