Ошибки распространены в программировании почти так же часто, как при написании кода. Это верно, даже если вы работаете с PostgreSQL. При миграции баз данных на PostgreSQL (самую передовую базу данных с открытым исходным кодом в мире) вы можете столкнуться с некоторыми ошибками миграции.

В этой статье обсуждаются распространенные ошибки PostgreSQL, с которыми вы можете столкнуться или сталкиваетесь в настоящее время. Однако, прежде чем мы углубимся, давайте быстро ответим на основной вопрос: Что такое PostgreSQL?

PostgreSQL — это эффективная, продвинутая система реляционных баз данных с открытым исходным кодом. Это система управления базами данных, известная своей надежностью, безупречной производительностью и надежными функциями. Точки данных хранятся в строках со столбцами в качестве отдельных атрибутов данных. В таблице могут храниться различные связанные строки.

Запросы SQL (реляционные) и JavaScript Object Notation (нереляционные) поддерживаются PostgreSQL. PostgreSQL также известен как Postgres. Дав вам ясность о том, что такое PostgreSQL, я хотел бы продолжить обсуждение распространенных ошибок, с которыми вы можете столкнуться в Postgres.

Языки, которые поддерживает PostgreSQL

Наиболее популярные языки программирования, которые поддерживает PostgreSQL:

  1. питон
  2. Javascript (Node.js)
  3. C#
  4. Ява
  5. Перл
  6. C/C+
  7. Рубин
  8. Go
  9. Tcl

Ошибки PostgreSQL: распространенные причины и решения

Ниже приведены некоторые из наиболее распространенных сообщений об ошибках, с которыми можно столкнуться при попытке переноса таблиц в базу данных. Хотя сообщения об ошибках могут точно сказать вам, что вызывает у вас проблемы, в большинстве случаев пользователи не знают, что делать, чтобы устранить сообщения об ошибках, которые они получают.

Ошибка 1: django.db.utils.OperationalError Не удалось подключиться к серверу

Вы можете получить эту ошибку, если хотите использовать приведенный ниже код для миграции ваших таблиц в Django.

python manage.py миграция

Когда вы развертываете свое веб-приложение локально, базой данных по умолчанию в Django является SQL. База данных по умолчанию, которую Django назначил вам при создании приложения, может быть не идеальной для производства. Вот почему для подобных задач рекомендуется использовать базу данных наподобие PostgreSQL.

Решение. Когда я столкнулся с этой ошибкой в ​​своем коде, я решил ее, напрямую подключившись к PostgreSQL с помощью psql и pgAdmin. Чтобы подключиться к psql, вам нужно проверить его местоположение в вашей операционной системе.

  • Linux. Самый простой способ подключения — проверить, есть ли у вас уже psql в переменных среды или нет. Попробуйте эту команду на своем терминале:

[данные root@localhost] #какой psql

/USR/бен/psql

Эта команда выводит путь, по которому находится psql. Поскольку операционная система знает местоположение, вам не нужно искать его. Однако, если вы столкнулись с ошибками, вы можете найти psql, выполнив поиск файла с помощью следующей команды в своем терминале.

[root@localhost /] #find / -name psql

/usr/edb/asll/bin/psql

  • Windows: вы можете проверить наличие psql в Program Files вашей системы или запустить его с помощью командной строки, просто щелкнув по нему.
  • Mac: вы можете найти psql в Applications › PostgreSQL (номер версии) › SQL Shell (psql).

После обнаружения psql вам нужно подключиться к базе данных. Если вы используете операционную систему Mac, вы сможете подключиться, нажав Enter в командной строке или в оболочке, когда вы пытаетесь запустить psql и вводите пароль.

Для ОС Linux вам нужно будет ввести следующие параметры в оболочку:

  • Для PostgreSQL: -bash-4.2$ psql -d postgres -U postgres
  • Для расширенных серверов: -bash-4.2$ psql -d edb -U enterprisedb

Если вы подключаетесь к удаленному серверу с Mac, Linux или Windows, вы можете ввести определенные параметры в следующем формате:

bash-4.2$ psql -h ‹имя хоста или IP-адрес› -p ‹номер порта удаленной машины› -d ‹имя базы данных, к которой вы хотите подключиться› -U ‹имя пользователя сервера базы данных›

Чтобы подключиться к PostgreSQL с помощью pgadmin 4, вы можете скачать pgadmin с веб-сайта.

После запуска pgadmin подключитесь к серверам баз данных, используя опцию создания сервера. Для пользователей Linux, использующих Ubuntu, вы можете найти в Интернете пошаговые инструкции по подключению к Postgres с помощью pgadmin 4.

Ошибка 2: django.db.utils.OperationalError: FATAL: нет записи pg_hba.conf для имени хоста

Если ваш код ошибки выглядит так:

Вероятно, используемое вами имя хоста сервера неверно.

Решение. Измените имя хоста с localhost на 127.0.0.1 в postgres://DBuser:myPASSWORD@localhost:5432/DBname. Таким образом, это должно выглядеть так: postgres://DBuser:[email protected]:5432/DBname.

Ошибка 3: django.db.utils.ProgrammingError: столбец «category_parent»

Если ваша ошибка выглядит так:

Виновником такой проблемы обычно являются старые миграции.

Решение. Если вам не нужно хранить данные, удалите таблицу и удалите папку, содержащую миграции. Затем снова мигрируйте. Если вам нужно сохранить свои данные, у вас есть два варианта:

  1. Переименуйте новый столбец
  2. Чтобы сохранить данные во время перехода, создайте временный столбец.

Затем вам нужна последовательность миграций. Чтобы добавить временный или новый столбец, используйте миграцию схемы. Миграция данных фактически перемещает данные во время любого необходимого преобразования (пример: «B» -> 2). Например, при миграции схемы удаляется временный столбец.

Ошибка 4: psql: не удалось подключиться к серверу: соединение отклонено

Если ваша ошибка выглядит так:

Эта ошибка означает, что сервер отказывает вам в доступе для подключения к базе данных. Это может быть вызвано либо тем, что вы используете неправильный порт в строке подключения, либо когда вы пытаетесь подключиться с помощью компьютера, который не разрешен во входящих источниках базы данных.

Решение. Проверьте порт, который вы использовали в строке подключения, и убедитесь, что компьютер, с которого вы подключаетесь, разрешен во входящих источниках вашей базы данных. Если вы все еще получаете сообщение об ошибке, возможно, у вас проблема с брандмауэром или локальным DNS.

Вывод

Всегда имейте в виду, что тип ошибки подскажет вам, что ее вызывает и что необходимо исправить. Иногда, просто скопировав и вставив ошибку, с которой вы столкнулись в Google, вы получите решения, написанные другими людьми, сталкивавшимися с ошибкой в ​​прошлом. И не стесняйтесь задавать вопросы о проблемах, с которыми вы сталкиваетесь, на таких форумах, как Переполнение стека.

Спасибо за чтение, и любезно оставьте комментарий в разделе комментариев.