0

I have been using PostGreSQL via Google Cloud App Engine for my Django Application. Lately, I have started seeing following issue :

...
File "/env/lib/python3.7/site-packages/django/utils/asyncio.py", line 26, in inner      return func(*args, **kwargs)    
File "/env/lib/python3.7/site-packages/django/db/backends/base/base.py", line 220, in ensure_connection      self.connect()    
File "/env/lib/python3.7/site-packages/django/db/utils.py", line 90, in __exit__      raise dj_exc_value.with_traceback(traceback) from exc_value    
File "/env/lib/python3.7/site-packages/django/db/backends/base/base.py", line 220, in ensure_connection      self.connect()    
File "/env/lib/python3.7/site-packages/django/utils/asyncio.py", line 26, in inner      return func(*args, **kwargs)    
File "/env/lib/python3.7/site-packages/django/db/backends/base/base.py", line 197, in connect      self.connection = self.get_new_connection(conn_params)    
File "/env/lib/python3.7/site-packages/django/utils/asyncio.py", line 26, in inner      return func(*args, **kwargs)    
File "/env/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 185, in get_new_connection      connection = Database.connect(**conn_params)    
File "/env/lib/python3.7/site-packages/psycopg2/__init__.py", line 126, in connect      conn = _connect(dsn, connection_factory=connection_factory, **kwasync)  
django.db.utils.OperationalError: FATAL:  remaining connection slots are reserved for non-replication superuser connections

My database settings are as follow :

if os.getenv('GAE_APPLICATION', None):
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'HOST': '/cloudsql/MYAPP:europe-west2:MYAPP',
            'NAME': 'MYNAME',
            'USER': 'MYUSER',
            'PASSWORD': access_secret_version("MYSECRET_SQL_PASSWORD"),
            'PORT': '5432',
        }
    }

What does this actually mean ?

1 Answer 1

1

This basically means that you are reaching the concurrent connection limit to your instance and need to either increase the limit or close some connections that are not needed.

You can increase the connection limit by using the max_connections flag to configure it, however, it is recommended to set a limit that keeps the instance stable. You can also change your instance machine type whith higher memory as it offers a higher default concurrent connection limit.

Another solution would be to use db connection pooling with pgbouncer, as Django framework does not offer database connection pooling. In addition, setting CONN_MAX_AGE to zero would help in some cases, as it allows closing the database connection at the end of each request.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.