Лучшие практики работы с PostgreSQL

В этой статье мы собрали для вас много полезных советов по использованию и настройке PostgreSQL от опытных разработчиков.

Используйте строки соединения и переменные среды

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

Поэтому для предоставления доверенных учетных данных доверенному коду мы рекомендуем использовать строку соединения вашей базы данных Postgres в качестве переменной среды DATABASE_URL. Это поддерживает любой стандартный веб-фреймворк (например, в Django есть dj-database-url).

Регулярно проводите ротацию учетных данных

Рекомендуется периодически менять учетные данные БД по всей организации. А в отдельных ситуациях, — например, когда команду покидает сотрудник, — это особенно важно. Обязательно смените пароли от всех БД и томам, к которым у этого человека есть доступ.

Достаточно, чтобы  файл .env, созданный пару лет назад, попал в чужие руки, и тогда всю вашу инфраструктуру можно немедленно взломать. Рекомендуем ввести в организации традиционный ежеквартальный день «ротации учетных данных» с жесткими сроками. Этот, вероятно, утомительный процесс со временем упростится. Особенно полезно внедрить в этот процесс автоматизацию.

Используйте BIGINT или UUID для первичных ключей

Большая ошибка во многих приложениях заключается в использовании для первичных ключей INT вместо BIGINT (например, каждое приложение Django делает это по умолчанию).

Когда вы используете INT вместо BIGINT, вы рискуете: однажды значение в вашей базе данных превысит «емкость» INT, и вам все равно понадобится мигрировать в BIGINT. Время миграции для преобразования таблицы из INT в BIGINT обычно занимает около 4 часов после обнаружения проблемы.

BIGINT гораздо более уместен в качестве PK по умолчанию и не намного «дороже» по хранению или индексации.

Многие также советуют использовать UUID:

-- Enable pgcrypto for UUID support.
CREATE EXTENSION pgcrypto;
-- Table: notes
CREATE TABLE notes (
uuid UUID DEFAULT gen_random_uuid(),
body text  NOT NULL,
byline text,
CONSTRAINT notes_pk PRIMARY KEY (uuid)
);

Узнайте больше о uuid4 / pgcrypto в Postgres.

Используйте пул соединений

При подключении к высокопроизводительному серверу баз данных Postgres вместо прямого подключения рекомендуется настроить своих клиентов на использование PgBouncer, облегченного пула соединений для PostgreSQL.

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

В заключение предлагаем вам некоторые дополнительные ресурсы по Postgres:

Tags: