Estou tentando especificamente evitar a conexão com o pooler/Supavisor e, em vez disso, quero usar uma conexão direta.
Supabase me dá um nome de host como:db.MY_ID.supabase.co
Não tem IP ipv4, mas consigo encontrar o recorde AAAA:
% dig AAAA db.MY_ID.supabase.co
; <<>> DiG 9.10.6 <<>> AAAA db.MY_ID.supabase.co
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59725
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;db.MY_ID.supabase.co. IN AAAA
;; ANSWER SECTION:
db.MY_ID.supabase.co. 30 IN AAAA dead:beef:IPV6:IPV6::IPV6:IPV6:dead:beef
;; Query time: 44 msec
;; SERVER: 192.168.20.1#53(192.168.20.1)
;; WHEN: Sat Mar 08 09:49:28 AEDT 2025
;; MSG SIZE rcvd: 92
Mas não consigo fazer o psql se conectar a ele nem por domínio nem por IP:
% psql "postgresql://db.MY_ID.supabase.co:5432/postgres?sslmode=require" -U myuser
psql: error: could not translate host name "db.MY_ID.supabase.co" to address: nodename nor servname provided, or not known
% psql "postgresql://[dead:beef:IPV6:IPV6::IPV6:IPV6:dead:beef]:5432/postgres?sslmode=require" -U myuser
psql: error: connection to server at "dead:beef:IPV6:IPV6::IPV6:IPV6:dead:beef", port 5432 failed: No route to host
Is the server running on that host and accepting TCP/IP connections?
O que estou fazendo errado? Há algo errado aqui no nível do Postgres que eu possa consertar?
Atualização: grawity está correto. Meu roteador não tinha o IPv6 habilitado. Tenho usado endereços IPv6 que apontam para o host local para fins de desenvolvimento, então presumi que tinha o IPv6 funcionando. Mas não o tinha funcionando na Internet, apenas no host local.
Sua segunda mensagem de erro diz:
No route to host
. Isso sugere que o sistema cliente do qual você está se conectando não tem conectividade IPv6 para começar.Pode haver outras causas para a mensagem – nenhuma delas relacionada ao Postgres, todas elas causadas pela falta de roteamento em um lugar ou outro – mas a máquina cliente sem IPv6 seria consistente com o problema de domínio somente IPv6 na primeira mensagem de erro.
Especificamente, se o sistema cliente não tiver uma rota padrão para IPv6 (nenhuma
::/0
rota), então seu resolvedor DNS Libc nem tentará resolver registros AAAA quando solicitado por "qualquer família de endereços" – é um recurso comumente usado em getaddrinfo() chamado AI_ADDRCONF, que a ferramenta psql provavelmente define – e você realmente verá sintomas como no primeiro exemplo.Se o cliente for Linux, execute
ip -6 route get <the_ipv6_address>
(com ou sem afibmatch
palavra-chave), ouip -6 route show match <the_ipv6_address> table all
, para verificar o que a tabela de roteamento do sistema possui.