Erro de DATABASE_URL PostgreSQL/Prisma
Subi um container do postgresql no ambiente de desenvolvimento o arquivo .env está da seguinte maneira: POSTGRES_HOST=localhost POSTGRES_PORT=5432 POSTGRES_USER=blog_local_user POSTGRES_DB=blog_local_db POSTGRES_PASSWORD=blog_docker DATABASE_URL=postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST:$POSTGRES_PORT/$POSTGRES_DB?schema=public
eu subo o container e testo a conexão e esta tudo normal, verifiquei as variaveis de ambiente no container e a DATABASE_URL está certa tbm "DATABASE_URL=postgresql://blog_local_user:blog_docker@localhost:5432/blog_local_db?schema=public"
porem quando eu tento subir as migrations com o prisma ele fica acusando o erro: P1013: The provided database string is invalid. invalid port number in database URL.(porta invalida)
e a porta está certa meu compose.yaml está apontada para a "5432:5432", se eu escrevo a DATABA_URL em Harcoded ele funciona
O erro que você está enfrentando com o Prisma, onde ele não aceita a DATABASE_URL
fornecida, pode estar relacionado a como as variáveis de ambiente estão sendo interpretadas. Mesmo que as variáveis estejam corretas dentro do container, a maneira como você formou a DATABASE_URL
pode ser a causa do problema. Aqui estão algumas sugestões para resolver isso:
-
Verifique o arquivo
.env
: Certifique-se de que não há espaços ou caracteres invisíveis na linha daDATABASE_URL
. Pode ser útil reescrever a linha manualmente. -
Formatação da
DATABASE_URL
: O formato da suaDATABASE_URL
parece correto, mas talvez seja necessário usar as variáveis diretamente no formato correto. Experimente o seguinte formato sem interpolação de variáveis, já que o Prisma pode não estar interpretando corretamente:DATABASE_URL=postgresql://blog_local_user:blog_docker@localhost:5432/blog_local_db?schema=public
Certifique-se de que essa string está exatamente como acima, sem espaços desnecessários.
-
Variáveis de Ambiente no Prisma: Verifique se o Prisma está configurado para usar as variáveis de ambiente corretamente. A maneira mais comum é ter uma configuração similar a esta no seu arquivo
schema.prisma
:datasource db { provider = "postgresql" url = env("DATABASE_URL") }
-
Verifique o Docker Compose: No seu arquivo
docker-compose.yaml
, confirme que o serviço do PostgreSQL está configurado corretamente. Um exemplo básico de um serviço PostgreSQL seria:version: '3.8' services: db: image: postgres:latest environment: POSTGRES_USER: blog_local_user POSTGRES_PASSWORD: blog_docker POSTGRES_DB: blog_local_db ports: - "5432:5432"
-
Reinicie o Container: Depois de fazer as alterações, não esqueça de reiniciar o container para que as novas configurações sejam aplicadas. Você pode usar:
docker-compose down docker-compose up -d
-
Verifique a versão do Prisma: Se você estiver usando uma versão antiga do Prisma, considere atualizar para a versão mais recente, pois pode haver correções de bugs que resolvem problemas de interpretação de strings de conexão.
-
Debug com Prisma: Tente executar um comando Prisma com maior verbosidade para obter mais informações sobre o erro:
npx prisma migrate dev -- --verbose
Tive um problema parecido enquanto testava a conexão com o postgresql, e o probelma foi caracteres especiais contidos na senha (que estava no arquivo .env). Depois que substituí o caractere especial/Letra maiúscula pela codificação utf-8, funcionou.
Você pode utilizar essa tabela para se basear na substituição dos caracteres e testar.