Это происходит эволюционно. Как говорится, make it run, make it right, make it fast. Сначала учишься хоть как-то работать с базами. Потом учишься их правильно проектировать с позиции удобства использования и доработки. Потом учишься их проектировать с учётом производительности. На первом этапе помогает учебник по SQL для начинающих. На втором этапе учебники по теории реляционных баз данных. На третьем документация конкретной СУРБД и боевой опыт. Одного учебника мало, нужны годы хождения по граблям.
Конкретно про анализ плана выполнения есть хорошие статьи на Хабре - раз, два, три, четыре, пять.
На 99.99% уверен, что вам это не нужно. По крайней мере у сотни других пользователей, которые задали здесь такой же вопрос, это решалось другим способом.
Во-первых, работать напрямую с БД из Django - такая себе идея. Во-вторых, судя по симптомам, у вас где-то открываются соединения, но не закрываются. Небось ещё и потоки или асинхронность используете?
Надо создать нового пользователя и базу данных, назначит пользователя владельцем этой базы и прописать в pg_hba.conf разрешение для этого пользователя подключаться к базе на 127.0.0.1. Не надо цепляться с такими реквизитами.
Похоже на исчерпание памяти сервера. Стоит помониторить её использование, найти где утечка и устранить. Да и неплохо бы настроить сервер так, чтобы он такого не позволял.