Prisma 7.8.0: керування query plan cache і PostgreSQL-фікси, які реально відчуваються

BackendDatabasePostgreSQLPrismaPerformance

Коротко: Prisma 7.8.0 не робить гучного шоу, але підкручує речі, які болять у реальних командах: керування queryPlanCacheMaxSize, виправлення для PostgreSQL JSON-фільтрів, міграцій і introspection. Це саме той реліз, який легко проігнорувати, а потім здивуватися, чому на проді росте пам’ять або чому один edge case у PostgreSQL знову поводиться як вперта кішка.

Проблема / контекст

У Prisma більшість проблем не виглядають драматично на першому екрані. Зазвичай усе починається тихо:

  • запити працюють, але навантаження росте;
  • міграції на staging проходять не так, як на локалі;
  • один JSON-фільтр повертає дивну помилку;
  • introspection підтягує не зовсім те, що ви очікували назад у Prisma schema.

У Prisma 7.8.0 саме такі історії й зачепили. Реліз додав один новий важіль для продуктивності та закрив кілька багів у PostgreSQL-шляху, які могли бути дрібними на папері, але дуже неприємними в живому застосунку.

Що змінилося у Prisma 7.8.0

1. З’явився ручний контроль над query plan cache

У Prisma Client додали queryPlanCacheMaxSize. Це дає змогу керувати розміром кешу планів виконання запитів.

Що це означає на практиці:

  • якщо одна й та сама query shape повторюється знову і знову, кеш може допомогти з продуктивністю;
  • якщо запитів дуже багато і вони всі різні, занадто великий кеш може даремно їсти пам’ять;
  • якщо хочете відключити кеш зовсім, можна передати 0.

Це не кнопка «зробити швидше автоматично». Це інструмент для команд, які вже дивляться на профіль навантаження, а не на інтуїцію з кавою.

2. PostgreSQL-фільтри по JSON стали менш крихкими

Prisma 7.8.0 виправляє кілька багів саме для PostgreSQL:

  • equality-фільтр по JSON list columns більше не ловить panic і не генерує неправильний ::jsonb cast;
  • case-insensitive JSON filtering із mode: insensitive тепер працює коректно;
  • @map для enum-значень більше не ламає параметризацію;
  • перевірка ліміту параметрів P2029 стала коректнішою.

Людською мовою: якщо ваш бекенд активно працює з JSON, фільтрами і enum-ами, це реліз із дуже конкретною цінністю.

3. Міграції та introspection стали спокійнішими

Ще кілька важливих фіксів:

  • prisma migrate diff більше не підсовує застаріле повідомлення про --shadow-database-url;
  • prisma migrate dev на PostgreSQL коректніше переживає CREATE INDEX CONCURRENTLY;
  • introspection більше не губить sequence defaults, коли PostgreSQL повертає schema-qualified nextval(...).

Це саме ті баги, які не видно в демо, але дуже добре видно в поганому релізному вечорі.

Чому це важливо

Якщо у вас Prisma + PostgreSQL, цей реліз б’є в три місця одночасно:

  1. Продуктивність queryPlanCacheMaxSize дає реальний контроль над тим, що Prisma тримає в пам’яті.

  2. Коректність запитів JSON-фільтри, enum-значення і параметри тепер поводяться передбачуваніше.

  3. Безпечні міграції CREATE INDEX CONCURRENTLY, shadow database і introspection — це ті штуки, які краще перевірити зараз, а не під час нічного hotfix.

Якщо коротко: Prisma 7.8.0 не просто «оновлює версію». Воно знімає частину дрібних, але болючих ризиків у PostgreSQL-проєктах.

Як до цього підійти без сюрпризів

1. Спочатку знайдіть, де Prisma взагалі впливає на прод

Перед оновленням подивіться:

  • які сервіси реально використовують Prisma Client;
  • чи є у вас PostgreSQL;
  • чи є JSON-поля з фільтрами;
  • чи є міграції з index creation;
  • чи використовуєте db pull або інші introspection-процеси.

Якщо ви не знаєте, де саме Prisma найважливіша, оновлення легко провести «нібито успішно» і пропустити найризиковіші місця.

2. Оновіть Prisma окремою гілкою

Не змішуйте це з паралельним рефакторингом schema, новими моделями і косметикою в тестах. Окремий diff = окремий розум.

Мінімальний порядок:

npx prisma -v
npx prisma generate
npx prisma migrate dev
npx prisma db pull

Потім прогнати ваші unit, integration і smoke-тести на PostgreSQL-даних, а не тільки на моках.

3. Тюнінг cache робіть тільки після вимірювання

Якщо хочете спробувати queryPlanCacheMaxSize, почніть із поточної дефолтної поведінки і порівняйте з кількома контрольованими значеннями на staging.

Корисно дивитися на:

  • p95 / p99 latency;
  • RSS або іншу пам’ять процесу;
  • кількість повторюваних запитів;
  • чи реально у вас багато різних query shapes.

Якщо запити майже завжди однакові, кеш зазвичай корисний. Якщо запити постійно різні, кеш може не дати відчутного бонусу.

4. Проганяйте PostgreSQL-edge cases окремо

Зробіть окремий smoke-набір:

  • JSON equality;
  • mode: insensitive на JSON;
  • enum поля з @map;
  • міграція з CREATE INDEX CONCURRENTLY;
  • db pull на схемі з sequence defaults.

Це не параноя. Це дешевше, ніж ловити одну неправильну умову в проді.

5. Якщо є доступ до живого навантаження — порівняйте до і після

Після апгрейду дивіться не тільки на «build green». Дивіться на:

  • поведінку API під реальним трафіком;
  • час відповіді на типові запити;
  • кількість помилок по PostgreSQL;
  • розмір процесу;
  • стабільність міграцій у staging.

Що не варто робити

Антипатерн 1. Увімкнути новий cache-важіль навмання

Якщо поставити значення без метрики, можна або нічого не виграти, або просто посунути проблему з CPU в пам’ять.

Антипатерн 2. Проковтнути реліз як «це ж тільки фікси»

Саме фікси часто і рятують прод. Тут вони дуже практичні: JSON, enum-значення, concurrent index creation, introspection.

Антипатерн 3. Не перевірити міграції окремо

migrate dev і db pull — не декоративні команди. Якщо ви їх використовуєте, їх треба реально прогнати після апгрейду.

Антипатерн 4. Змішати апгрейд Prisma зі schema-революцією

Коли в одному PR і нова версія, і нові моделі, і нові індекси, і нові тести, потім уже ніхто не знає, що саме зламало реліз.

Висновок / план дій

Prisma 7.8.0 — хороший момент, щоб зробити дві речі:

  1. підняти версію без зайвого героїзму;
  2. чесно перевірити, чи ваш PostgreSQL-кейс не сидів на одному з виправлених edge cases.

Найрозумніший шлях такий:

  • оновити в окремій гілці;
  • прогнати Prisma commands і ваші тести;
  • перевірити JSON-фільтри та міграції;
  • лише потім вирішувати, чи тюнити queryPlanCacheMaxSize.

Коротко: не крутити ручку, поки не зрозуміли, що саме вона керує.

Офіційне джерело:

Короткий чеклист

  • Оновити Prisma до 7.8.0 у окремій гілці
  • Прогнати `npx prisma generate` і базовий набір тестів
  • Перевірити JSON-фільтри на PostgreSQL
  • Прогнати `npx prisma migrate dev` на тестовій базі
  • Перевірити `npx prisma db pull`, якщо ви використовуєте introspection

Prompt Pack: оцінити Prisma 7.8.0 перед апгрейдом

Ти — backend engineer, який допомагає оцінити Prisma 7.8.0 для застосунку на PostgreSQL. Вхідні дані: - поточна версія Prisma; - фрагмент `schema.prisma`; - 5 найважливіших запитів або end-to-end сценаріїв; - чи є JSON-поля, міграції з індексами та `db pull`; - метрики навантаження або хоча б приблизний профіль трафіку. Дай відповідь у 6 блоках: 1) Quick verdict: чи є сенс оновлюватися зараз. 2) Performance angle: коли `queryPlanCacheMaxSize` може допомогти, а коли лише додасть шуму. 3) PostgreSQL risk map: які edge cases з JSON, enum і міграціями треба перевірити першими. 4) Rollout plan: точний порядок оновлення локально, у CI і на staging. 5) Validation checklist: які команди і сценарії прогнати після апгрейду. 6) Rollback plan: як швидко повернутися назад, якщо щось піде не так. Формат: - українською; - коротко, але предметно; - без води; - ризики пояснюй людською мовою.