Я воскрешаю свою локальную среду для проекта Django, который не запускал локально уже 2 года, работая над проблемами, связанными с устаревшими вещами. Но у меня есть немного другое: похоже, что Django находит/использует более старую версию PostgreSQL, чем та, которую я вижу в самом venv. Каков хороший подход к отслеживанию старых версий и их удалению?
Когда я бегу python mysite/manage.py runserver
, я получаю
django.db.utils.NotSupportedError: PostgreSQL 13 or later is required (found 10.13).
НО когда я проверяю версии пакетов в venv, который использую, большинство пакетов являются текущими, а PostgreSQL — 3.12.5 (не 13 или более поздняя версия, как нам в конечном итоге понадобится, но и не 10.13).
(из списка пунктов) Джанго 5.1
(из списка пипсов) psycopg2 2.9.9
(из списка пипов) psycopg2-binary 2.9.9
(из списка пипов) psycopg2-pool 1.2
psql -V дает: psql (PostgreSQL) 12.3
python -v дает: Python 3.12.5
Неудивительно, что если я попробую выполнить простое удаление с venv (pip uninstall postgresql-10.13
), он скажет, что оно не установлено.
Каков хороший подход к отслеживанию того, откуда может прийти 10.13?
Глядя в трассировку стека, эта ошибка NotSupportedError возникает при подключении к базе данных из .venv/lib/python3.12/site-packages/django/db/backends/base/base.py", строка 200, в check_database_version_supported
Из venv моя переменная $PATH имеет:
/Users/dkaplan/.vscode/extensions/ms-python.python-2024.12.3-darwin-x64/python_files/deactivate/bash:/Users/dkaplan/family-django/.venv/bin:/Library/Frameworks/Python .framework/Versions/3.12/bin:/Library/Frameworks/Python.framework/Versions/3.12/bin:/Library/Frameworks/Python.framework/Versions/3.10/bin:/usr/local/bin:/usr/bin :/bin:/usr/sbin:/sbin:/Users/dkaplan/.m2:/Applications/Postgres.app/Contents/Versions/latest/bin:/var/run/com.apple.security.cryptexd/codex. system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/ bootstrap/usr/appleinternal/bin:/Users/dkaplan/.vscode/extensions/ms-python.python-2024.12.3-darwin-x64/python_files/deactivate/bash:/Users/dkaplan/family-django/.venv/ bin:/Library/Frameworks/Python.framework/Versions/3.12/bin:/Library/Frameworks/Python.framework/Versions/3.10/bin
Мои настройки баз данных по умолчанию:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql_psycopg2",
"NAME": DB_DATABASE,
"USER": DB_USER,
"PASSWORD": DB_PASSWORD,
"HOST": DB_HOST,
"PORT": "5432",
"OPTIONS": DB_OPTIONS,
}
}
@Адриан Клавер Я думаю, ОП ясно дала понять в вопросе, что она использует локальную среду.
@ 16171413. ... локальная среда для проекта Django, которая относится к тому, где работает Django. Это ничего не говорит о том, где работает база данных, к которой он подключается. Это будет любое значение DB_HOST
. Я просил сделать это значение явным, а не зависеть от предположения.
@AdrianKlaver спасибо за то отличие, что версия psql — это клиент командной строки psql — это имеет смысл! И использовал локальную базу данных - из комментария ниже следует, что, вероятно, сама база данных нуждается в обновлении, что имеет смысл, поскольку я не трогал ее уже два года. Я иду по следу!
Если вы собираетесь обновиться, возможно, вам стоит перейти на Postgresql 16, поскольку он будет поддерживаться до 9 ноября 2028 года + или -. Дополнительную информацию см. в разделе Управление версиями Postgres. Вам также следует потратить некоторое время на изучение того, что у вас есть сейчас, поскольку found 10.13
и psql -V gives: psql (PostgreSQL) 12.3
обычно указывают на то, что у вас установлено более одного экземпляра Postgres.
Вы не можете удалить postgresql-10.13 с помощью pip, поскольку postgresql-10.13 не является пакетом Python.
Вы можете удалить определенную версию postgresql так же, как вы удаляете программы на своем компьютере. См. Удаление PostgreSQL.
Это не очень хороший совет. Слепое удаление без проверки того, что у вас запущено или сохранены ли где-то данные, — это верный путь к катастрофе.
@AdrianKlaver Я не могу найти нигде, где бы я советовал ОП удалить postgres. Давайте посмотрим на ее вопрос: она попыталась удалить старую версию postgresql, но ввела неправильную команду. Затем я сказал, что вы можете удалить определенную версию postgresql так же, как вы удаляете программы на своем компьютере. Это не совет, а ответ на то, что она уже пыталась сделать. Так кто же лучше знает содержимое базы данных, чем ее владелец? 🤔
Если вы не думаете, что это совет, вы серьезно заблуждаетесь.
Удалить ее базу данных или нет - выбор ОП. Сэр, если у вас есть лучший ответ, вы можете опубликовать его здесь. Я хотел бы научиться
По сути, вам нужно обновить PostgreSQL.
покопайтесь в pg_upgrade
вот документы https://www.postgresql.org/docs/current/pgupgrade.html
проблема возникает из-за базы данных postgresql, которая находится на вашем компьютере. Это старое :)
Это не пакет Python, pip здесь не поможет.
Или вы можете рассмотреть возможность сброса базы данных с помощью pg_dump, используя что-то вроде версии Postgres для компоновки Docker и пакета django-dbbackup для восстановления базы данных.
Конечно, это имеет смысл! Я могу установить обновление, пока коровы не вернутся домой, но да, локальная база данных двухлетней давности все еще будет старой и заплесневелой. Я посмотрю на эту ссылку и подтвержу, что как только обновлю базу данных, все будет готово — спасибо!!!
не уверен, сарказм это или нет, но в любом случае пожалуйста 🖖
Ни капельки саркастичности, ваш ответ был именно таким - спасибо! Я только что подтвердил в свойствах версии самой локальной базы данных, что именно оттуда взялась версия 10.13! (И для следующих шагов я могу обновить это или сделать дамп/восстановить новую копию продукта, но это был ответ!)
Учитывая это /var/run/com.apple.security.cryptex
и это vscode/extensions/ms-python.python-2024.12.3-darwin-x64
, я скажу, что вы используете MacOS. Это означает четыре известных мне способа установки Postgres: а) Сборка из исходного кода. б) Установите с помощью Homebrew. в) Postgres.app г) Установите с помощью установщика EnterpriseDB.
Я бы сделал следующее:
Определите, какие экземпляры Postgres у вас установлены. С командной строки ps ax | grep postgres
было бы неплохо начать. Затем вам нужно будет определить, какой из вышеперечисленных методов использовался для установки Postgres (возможно, несколько методов). Если существует несколько экземпляров, выясните, какой из них содержит нужную вам информацию, DDL, а также данные.
Примите решение относительно жизнеспособности данных. Я бы посоветовал сделать pg_dump
данных на тот случай, если позже окажется, что там была важная информация.
Решите, на какую версию вы хотите перейти. Согласно моему комментарию, я бы предложил Postgres 16, поскольку он дает вам больше времени, прежде чем вам снова понадобится обновление. Установите эту версию.
Если вы решили переместить данные, есть два варианта: а) Выполните pg_dump/pg_restore. Жизнь станет проще, если вы используете более новую версию pg_dump для дампа старой базы данных Postgres. б) Используйте pg_upgrade.
Удалите старые версии Postgres, используя любой метод, предоставляемый инструментом упаковки.
Перспективы в документации Django:
https://docs.djangoproject.com/en/5.1/ref/databases/#postgresql-notes
Django поддерживает PostgreSQL 13 и выше. Требуется psycopg 3.1.8+ или psycopg2 2.8.4+, хотя рекомендуется последняя версия psycopg 3.1.8+.
Примечание Поддержка psycopg2, вероятно, будет прекращена в какой-то момент в будущем.
Возможно, сейчас вы подумаете об обновлении до psycopg(3)
. Предостережение будет заключаться в том, что вы используете psycopg2
вне приложения Django в этой среде. Между psycopg2
и psycopg
есть некоторые существенные различия: см.:
1) Не существует
Postgres 3.12.5
вашей версии Python. 2)psql -V gives: psql (PostgreSQL) 12.3
говорит о том, что вы используете версию 12.3 клиента командной строкиpsql
. Это не значит, что у вас обязательно должен быть работающий сервер Postgres 12.3, поскольку его можно установить как часть клиентского пакета. 3) Вам необходимо добавить к своему вопросу в виде текстового обновления информацию о том, какую ОС и версию вы используете и как вы установили Postgres. 4) Проект Django подключается к локальной или удаленной базе данных?