psycopg2.OperationalError: FATAL: извините, слишком много клиентов уже на герою - PullRequest
0 голосов
/ 24 марта 2020

Я пытался положить sh мое Flask приложение на heroku, и мое приложение использует Postgres в качестве дБ. Однако, когда я попытался перенести db на heroku с помощью этой команды

heroku run python manage.py db init --app app

Это выдает ошибку "слишком много клиентов" как для psycopg2, так и для sqlalchchemy.

Running python manage.py db migrate on ⬢ petscom... up, run.5707 (Hobby)
Traceback (most recent call last):
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2285, in _wrap_pool_connect
    return fn()
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 303, in unique_connection
    return _ConnectionFairy._checkout(self)
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 773, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 492, in checkout
    rec = pool._do_get()
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/impl.py", line 238, in _do_get
    return self._create_connection()
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 308, in _create_connection
    return _ConnectionRecord(self)
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 437, in __init__
    self.__connect(first_connect_check=True)
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 657, in __connect
    pool.logger.debug("Error on connect(): %s", e)
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 69, in __exit__
    exc_value, with_traceback=exc_tb,
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
    raise exception
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/pool/base.py", line 652, in __connect
    connection = pool._invoke_creator(self)
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/strategies.py", line 114, in connect
    return dialect.connect(*cargs, **cparams)
  File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 488, in connect
    return self.dbapi.connect(*cargs, **cparams)
  File "/app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py", line 126, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL:  sorry, too many clients already
FATAL:  sorry, too many clients already

После небольшого поиска в Google , Я пробовал:

  1. heroku pg: killall
  2. heroku restart Ни одна из этих работ .....

И я проверил heroku pg, это показывает 0/20 соединений ...... enter image description here

Некоторые говорят, что не помещайте соединение дБ в l oop, но я должен проверить, есть ли некоторые данные в дБ. Вот мой код:

try:
        connection = psycopg2.connect(user="postgres",
                                      password="pass",
                                      host="127.0.0.1",
                                      port="5432",
                                      database="pets")

        cursor = connection.cursor()

        select_all = "select * from pets"
        cursor.execute(select_all)

        # Check if api data in db and save to db
        for index in range(len(myData)):
            # if not exist in db => save to db
            key = myData[index]["animal_id"]
            exists = check_exists(key, cursor)
            if(exists):
                pass
            else:
                doSomething()

Я могу подключиться к своему локальному postgres дБ, но не к дБ на героку. Как я могу справиться с этой проблемой? Любой совет поможет :) Спасибо!

1 Ответ

1 голос
/ 24 марта 2020

У меня была похожая проблема. Мне удалось это исправить, установив SQLALCHEMY_TRACK_MODIFICATIONS=False в среде, уничтожив базу данных и создав новую.

Вы можете уничтожить ее, перейдя к https://data.heroku.com/datastores, открыв базы данных, перейдите в «Настройки» и выберите «Уничтожить базу данных».

Затем установите новую, как обычно.

...