В этой статье мы собрали для вас много полезных советов по использованию и настройке 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: