prisma can't connect to postgresql

Viewed 5499

I've tried to connect Prisma with postgreSQL several times. prisma show this error message : "Error: undefined: invalid port number in "postgresql://postgres:password@localhost:5432/linker")".

-error enter image description here

-prisma/.env

DATABASE_URL=postgresql://postgres:password@localhost:5432/linker

-schema.prisma

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

So, first, I checked the port number to see if it was right and 5432 is right because I use the default port number. I also checked the postgresql.conf file, which is set to "listen_address="*"" , "port=5432".

enter image description here

And I went into pgAdmin4 and saw server's properties. the port number was 5432 as shown below image, and the username was set "postgres".

enter image description here

I don't know why prisma can't connect
Did i something missed?

3 Answers

Replace special characters with percent-encodings

Make sure that in your DATABASE_URL in the .env file, the special characters are replaced with percent-encodings.

For example, if your username or password contains @ character, it should be replaced with its equivalent percent-encoding, that is %40. For # it is %23 and so on. See the list below.

Percent-encodings

Following are the percent-encodings for the frequently used special characters:

Special Character Percent Encoding
! %21
# %23
$ %24
% %25
& %26
' %27
( %28
) %29
* %2A
+ %2B
, %2C
/ %2F
: %3A
; %3B
= %3D
? %3F
@ %40
[ %5B
] %5D
newline %0A or %0D or %0D%0A
space %20
" %22
% %25
- %2D
. %2E
< %3C
> %3E
\ %5C
^ %5E
_ %5F
` %60
{ %7B
| %7C
} %7D
~ %7E
£ %C2%A3
%E5%86%86

For anyone running into this, see the comments above on the answer!

Removing symbols from the db password (hosted on AWS RDS) fixed the problem for me.

You should convert your password to URL encoded format in order to use it in the database connection string.

Accepted answer is correct.

But I want to show a programmatic and easy solution since manually replacing special characters in your password is error prone.

You have NodeJS installed on your machine (obviously, since you are trying to use Prisma)

Open a terminal and start a NodeJS process (current directory does not matter):

node

Then type this, hit enter:

     new URLSearchParams({pass: "YOUR_PASSWORD_WITH_SPECIAL_CHARACTERS"}).toString().substring(5)

As a result you will get the URL encoded version of your password printed to console:

'YOUR_PASSWORD_URL_ENCODED'

Copy it (without the quotes) and use it in your database connection string as your password.

Related