Executando verificação de segurança...
3

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

Carregando publicação patrocinada...
2

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:

  1. Verifique o arquivo .env: Certifique-se de que não há espaços ou caracteres invisíveis na linha da DATABASE_URL. Pode ser útil reescrever a linha manualmente.

  2. Formatação da DATABASE_URL: O formato da sua DATABASE_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.

  3. 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")
    }
    
  4. 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"
    
  5. 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
    
  6. 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.

  7. Debug com Prisma: Tente executar um comando Prisma com maior verbosidade para obter mais informações sobre o erro:

    npx prisma migrate dev -- --verbose
    
1

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.

1

ou pegar a string e pegar o resultado usando a função encodeURIComponent!
algo do tipo:

encodeURIComponent("senha_postgres")

depois disso so copia e cola a senha encodada