TGViewer
Haiku Haiku @samurai_haiku · 452 subscribers
Post #1286 176
Postgres — Don't Do This
https://wiki.postgresql.org/wiki/Don%27t_Do_This

Список антипаттернов из официальной вики PostgreSQL. Простыми словами:

1. SQL_ASCII — база складывает байты без проверки, получается каша из кодировок, которую не разобрать. Берите UTF-8.
2. psql -W / --password — спрашивает пароль даже когда он не нужен, путает диагностику доступа. psql сам спросит, если надо.
3. RULE — выглядит как логика, а молча переписывает запрос; все нетривиальные правила неверны. Нужен побочный эффект — триггер.
4. Наследование таблиц — мода на «БД как объекты», не взлетела. Связи — внешними ключами.
5. NOT IN — с NULL всегда 0 строк; с подзапросом планировщик не делает anti-join, получается квадратичный перебор и падение скорости в тысячи раз на росте данных. Пишите NOT EXISTS.
6. Имена MyTable — без кавычек всё приводится к нижнему регистру, с кавычками нет; вечные «no such table». Пишите my_table.
7. BETWEEN с timestamp — включает обе границы, ровно полночь считается дважды. Пишите >= начало AND < конец.
8. timestamp без зоны — это «фотография часов», а не момент времени; арифметика через переход на летнее время врёт. Берите timestamptz.
9. UTC в timestamp without time zone — база не знает, что это UTC, и любой расчёт превращается в цепочку AT TIME ZONE.
10. timetz и CURRENT_TIME — время с зоной без даты бессмысленно. Берите now() / CURRENT_DATE / LOCALTIMESTAMP.
11. timestamp(0) — округляет, а не отрезает, время «уезжает» вперёд. Нужна секунда — date_trunc('second', x).
12. char(n) — добивает пробелами, тратит место, не быстрее и странно сравнивается. Даже для кодов стран: text + CHECK(length(...)=3).
13. varchar(255) по привычке — text занимает ровно столько же и не медленнее; случайный лимит однажды уронит прод. Лимит — только осознанно.
14. money — не хранит валюту (зависит от настройки lc_monetary), не умеет доли цента, округляет не так. Берите numeric + колонку валюты.
15. serial — устаревшая автонумерация с неудобными зависимостями и правами. В новом коде — GENERATED AS IDENTITY.
16. trust-аутентификация по TCP/IP — сервер верит на слово, кем вы представились. host all all 0.0.0.0/0 trust = любой из интернета входит суперпользователем. Только scram-sha-256.

Проверить свою схему автоматически: schemalint — https://github.com/kristiandupont/schemalint
  • 🫡 3
  • 👍 2
More from @samurai_haiku
  1. Oct 3, 2026Kent Beck at Prodacity 2026 talked about what craft means now that a model is writing much…
  2. Oct 2, 2026Elizabeth Garrett Christensen: Query Plan Hints in PostgreSQL 19: How &amp; When to Use Ad…
  3. Oct 2, 2026Pg_lake: Integrate Your Data Lakehouse with Postgres Pg_lake предлагает интеграцию между с…
  4. Oct 2, 2026Pg_redact: Content-aware PII redaction with Jev, enforced in Postgres Pg_redact представля…
  5. Sep 30, 2026Postgres по QUIC: эксперимент с мультиплексированием транспорта Ребята из Lupyd пропатчили…
  6. Sep 29, 2026🎙 XConf Europe 2026: пять самых просматриваемых докладов — код, суверенитет, LLM Wiki, ET…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →