Компания «ФинДата» — финтех-стартап, 3 кластера PostgreSQL 15 с суммарным объёмом 2.8 ТБ данных. Решили обновляться до PG 17 ради трёх киллер-фич:
| Фича | Что даёт | Было в PG 15/16 |
|---|---|---|
| Инкрементальный бэкап | Только изменённые блоки, экономия 90% трафика | Только full backup |
| JSON_TABLE | SQL-стандартная функция для парсинга JSON в строки | jsonb_to_recordset (нестандартный) |
| VACUUM improvements | На 2-3x быстрее на больших таблицах | Медленный VACUUM на 100M+ строк |
| Logical replication slots | Failover slots при переключении реплики | Слоты терялись при failover |
| MERGE improvements | RETURNING clause для MERGE | MERGE без RETURNING |
-- JSON_TABLE: парсинг JSON-массива в реляционные строки
SELECT jt.*
FROM orders,
JSON_TABLE(
order_data,
'$.items[*]'
COLUMNS (
product_id INT PATH '$.id',
name TEXT PATH '$.name',
qty INT PATH '$.quantity',
price NUMERIC PATH '$.price'
)
) AS jt
WHERE orders.id = 12345;
-- Раньше приходилось писать:
SELECT (item->>'id')::int, item->>'name', (item->>'quantity')::int
FROM orders, jsonb_array_elements(order_data->'items') AS item
WHERE id = 12345;
Комментарии 0