Как не облажаться с типами данных в PostgreSQL

Недавно вышла книга PostgreSQL Mistakes and How to Avoid Them — своего рода «коллекция грабель» для разработчиков и администраторов. Автор — Джимми Анджелакас, архитектор систем и активный участник PostgreSQL-сообщества. Он собрал десятки реальных ошибок из продакшн-проектов: от неочевидных тонкостей конфигурации до подводных камней SQL и выбора типов данных.

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

Например:

- timestamp without time zone — источник боли при расчётах с часовыми поясами (и переходом на летнее/зимнее время).

- money — тип, который не хранит валюту и округляет в минус (буквально).

- char(n) и varchar(n) — не экономят место, а индексам только мешают.

- serial — привет из прошлого века, лучше использовать identity-колонки.

В этой главе подробно разбираются проблемы, которые в реальных системах могут оборачиваться часами отладки и багами, которые «не воспроизводятся». Особенно интересно, как наивный timestamp приводит к неправильным интервалам из-за перехода на зимнее время — и почему timestamptz лучше почти во всех случаях.

Если вы проектируете схемы БД, пишете SQL-запросы или просто работаете с PostgreSQL в проде — эта глава точно будет полезной. Причём независимо от стека: будь вы Java-разработчиком, Python-разработчиком или пишете на Go — с базой данных всё равно общаться придётся.

📖 Читаем перевод на Хабре: https://habr.com/ru/articles/923572/

Как не облажаться с типами данных в PostgreSQL | Сетка — социальная сеть от hh.ru