Connecting to Google Cloud SQL Postgres instance using psycopg2
Asked Answered
R

3

0

I am trying to connect to Google Cloud SQL Postgres Using psycopg2.

I have created an postgreSQL instance and using the default database postgres for now. I am able to connect from pgadmin tool as well as from the gcloud shell and the queries give expected result.

I have developed a flask application and deploying on standard app engine.

conn = psycopg2.connect(database="postgres", user = "postgres", password = "password", host = "/cloudsql/my-new-db")

And when I run it, the get psycopg2.OperationalError: could not connect to server: No such file or directory error.

I have a hunch that host value is not correct. I tried various options like /cloudsql/<prj-name>.<region>.<db-instance-name>

But, nothing seems to be working. What else should I be doing to remove this error?

Reformation answered 4/4, 2021 at 14:29 Comment(1)
Hello! I'm building something similar. Do you happen to have a full solution to what you've done? I am running into some issues that I couldn't resolve with the below solutions.Lysippus
I
1

As mentioned in this article on connecting to Cloud SQL from app engine:

Connecting with Unix sockets

Once correctly configured, you can connect your service to your Cloud SQL instance's Unix domain socket accessed on the environment's filesystem at the following path: /cloudsql/INSTANCE_CONNECTION_NAME.

The INSTANCE_CONNECTION_NAME can be found on the Overview page for your instance in the Google Cloud Console or by running the following command:

    gcloud sql instances describe [INSTANCE_NAME]

edit: formatting

Insurgence answered 5/4, 2021 at 15:28 Comment(3)
I am using psycopg2 module and not the sqlalchemy ORM. Can you help me with the psycopg2 module?Reformation
UNIX socket path is same whether you yse sqlalchemy or psycopg2.Insurgence
posted my solution as an answerReformation
R
3
unix_socket = '/cloudsql/{}'.format("my-project-id:us-central1:my-db-name")

conn = psycopg2.connect(database="postgres", user = "postgres", password = "password", host = unix_socket)

This worked for me.

Reformation answered 9/4, 2021 at 15:4 Comment(0)
I
1

As mentioned in this article on connecting to Cloud SQL from app engine:

Connecting with Unix sockets

Once correctly configured, you can connect your service to your Cloud SQL instance's Unix domain socket accessed on the environment's filesystem at the following path: /cloudsql/INSTANCE_CONNECTION_NAME.

The INSTANCE_CONNECTION_NAME can be found on the Overview page for your instance in the Google Cloud Console or by running the following command:

    gcloud sql instances describe [INSTANCE_NAME]

edit: formatting

Insurgence answered 5/4, 2021 at 15:28 Comment(3)
I am using psycopg2 module and not the sqlalchemy ORM. Can you help me with the psycopg2 module?Reformation
UNIX socket path is same whether you yse sqlalchemy or psycopg2.Insurgence
posted my solution as an answerReformation
S
0

on your flask server make sure to install the psycopg2 library (pip install or use apt-get install). I have attached a small snippet of code that I have for successful connection to my Postgres database and maybe it will assist in some way. I noticed you don't have a port specified.

connection = psycopg2.connect(
   user = 'userName',
   password = password,
   host = 'some ip here',
   port = '5432',
   database = 'db name here'
)

The host in my case is the IP of the server which has a port forwarded for access to my flask server. I am not sure what way you are accessing your host. My flask API and DB are actually hosted on separate VM's within google cloud. I hope this helped at all, if it doesn't maybe more context could be provided and I could look at it more.

Schmaltz answered 8/4, 2021 at 11:16 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.