image
Виникла необхідність вести аудит зміни даних в існуючій системі.

Вимоги:

  • Простота підключення/відключення логгирования окремих таблиць.
  • Скоротити до мінімуму зміни у вже існуючих функціях БД.
  • Мінімізувати деградацію продуктивності.

Читати далі →



В кінці липня 2016 року в корпоративному блозі Über з'явилася воістину історична стаття про причини переходу компанії з PostgreSQL на MySQL. З тих пір в жарких обговореннях цього матеріалу було зламано чимало списів, аргументи Über були ретельно препаровані; компанію звинуватили в упередженості, технічної неграмотності, нездатності ефективно взаємодіяти з спільнотою та інших смертних гріхах, при цьому по гарячих слідах Postgres було внесено кілька змін, покликаних вирішити деякі з описаних проблем. Список наслідків на цьому не обмежився, і його можна продовжувати ще дуже довго.
Напевно, не буде перебільшенням сказати, що за останні кілька років це було одне з найбільш гучних і резонансних подій, пов'язаних з СУБД PostgreSQL, яку ми, до речі сказати, дуже любимо і широко використовуємо. Ця ситуація напевно пішла на користь не тільки згаданим систем, але і руху Free and Open Source в цілому. При цьому, на жаль, російського перекладу статті так і не з'явилося. Зважаючи на значущість події, а також докладного і цікавого з технічної точки зору викладу матеріалу, в якому стилі Postgres vs MySQL йде порівняння фізичної структури даних на диску, організації первинних і вторинних індексів, реплікації, MVCC, оновлень і підтримки великої кількості сполук, ми вирішили заповнити цей пробіл і зробити переклад оригінальної статті. Результат ви можете знайти під катом.
Читати далі →

І знову про рекурсивних запитів

У цій замітці мова піде про те, як писати рекурсивні запити. Ця Тема піднімалася не раз і не два, але зазвичай все обмежується простими «дерев'яними» випадками: спуститися від вершини до листя, піднятися від вершини до кореня. Ми ж займемося більш складним випадком довільного графа.

Почнемо з того, що повторимо теорію (дуже коротко, тому що з нею все ясно), а потім поговоримо про те, що робити, якщо незрозуміло, як підступитися до реальної задачі, або начебто зрозуміло, але запит вперто не хоче працювати.

Для вправи будемо використовувати демо-базу, докладно описану раніше, і спробуємо написати в ній запит для пошуку найкоротшого шляху з одного аеропорту в інший.


Читати далі →

Як працюють ІТ-фахівці. Ілля Космодемьянский, PostgreSQL-Consulting LLC

image

Ми продовжуємо розпитувати фахівців про режим праці та відпочинку, професійні звички, про інструментарій, який вони використовують, і багато чому іншому.

Буде цікаво з'ясувати, що їх об'єднує, в чому вони суперечать один одному. Можливо, їх відповіді допоможуть виявити якісь загальні закономірності, корисні поради, які допоможуть багатьом з нас.

Сьогодні наш гість — Ілля Космодемьянский, генеральний директор PostgreSQL-Consulting LLC. У Іллі гранично простий лафхак на всі випадки життя. А одним із своїх авторитетів він вважає в. І. Леніна.
Читати далі →

Як працюють ІТ-фахівці. Іван Панченко, Postgres Professional

image

Ми продовжуємо розпитувати фахівців про режим праці та відпочинку, професійні звички, про інструментарій, який вони використовують, і багато чому іншому.

Буде цікаво з'ясувати, що їх об'єднує, в чому вони суперечать один одному. Можливо, їх відповіді допоможуть виявити якісь загальні закономірності, корисні поради, які допоможуть багатьом з нас.

Сьогодні наш гість — Іван Панченко, заступник генерального директора Postgres Professional. У нього свій підхід до керівництва і суперечливе ставлення до обідньої перерви. А деякі книги по програмуванню він читає майже як художню літературу.
Читати далі →

Як працюють ІТ-фахівці. Олег Бартунов, Postgres Professional

image

Ми продовжуємо розпитувати фахівців про режим праці та відпочинку, професійні звички, про інструментарій, який вони використовують, і багато чому іншому.

Буде цікаво з'ясувати, що їх об'єднує, в чому вони суперечать один одному. Можливо, їх відповіді допоможуть виявити якісь загальні закономірності, корисні поради, які допоможуть багатьом з нас.

Сьогодні наш гість — Олег Бартунов, генеральний директор компанії Postgres Professional. У 2015 році Олег і його команда залучили кілька мільйонів доларів США на створення вітчизняного вендора PostgreSQL.
Читати далі →

JSON і PostgreSQL 9.5: з ще більш потужними інструментами

PostgreSQL 9.5 представив новий функціонал, пов'язаний з JSONB, що значно підсилює його вже наявні NoSQL характеристики. З додаванням нових операторів і функцій, тепер стало можливо з легкістю змінювати дані, що зберігаються в JSONB форматі. У цій статті будуть представлені ці нові оператори з прикладами, як їм можна використовувати.

З додаванням типу даних JSON у версії 9.2, PostgreSQL нарешті почав підтримувати JSON нативно. Незважаючи на те що з виходом цієї версії стало можливо використовувати PostgreSQL як «NoSQL» базу даних, не так багато можна було зробити насправді в той час з-за браку операторів і цікавих функцій. З моменту виходу версії 9.2, підтримка JSON значно поліпшувалася у кожної наступної версії PostgreSQL, виливаючись сьогодні в повне подолання початкових обмежень.

Читати далі →

Розширення pg_variables

Розширення pg_variables.
Часто при разрабоке прикладного ПЗ можна зіткнутися з проблемою такого роду — для проміжних даних потрібно отримати кілька результуючих наборів, наприклад, для деяких товарів треба мати можливість отримати їх наявність в поточних замовленнях і суму знижок, наданих для них раніше; або для деяких користувачів отримати список їхніх друзів і сполучення цих користувачів в соцмережах і т. д і т. п.
Рішення зазвичай виглядає цілком прямолінійним — спочатку отримуємо список, скажімо, користувачів, потім для них будуємо необхідний результуючий набір; потім знову отримуємо список користувачів і будуємо другий набір; і все б добре, якби побудова такого списку не виявлялося б досить витратною операцією — і, таким чином, якщо на підставі цього списку треба побудувати кілька результатів, то виходить, що цей список треба отримати кілька разів з усіма супутніми накладними витратами. Очевидним вирішенням цієї проблеми видаються тимчасові таблиці, і це дійсно так; на жаль, з ними пов'язаний ряд не самих приємних особливостей — для кожної тимчасової таблиці потрібно створювати файл (а при знищенні таблиці — видаляти). Крім того, ці таблиці, зрозуміло, не видно для процесів автовакуума і, отже, не очищаються автоматично, і за ним не збирається статистика. Що ще гірше, при наявності тривалих активних транзакцій відбувається необмежений ріст системного каталогу; більш того, кеш операційної системи заповнюється даними про файлах створених для тимчасових таблиць, що веде до загальної деградації продуктивності.
Слід також зазначити, що так як ім'я таблиці має бути відомо при компіляції запиту, то використання різних таблиць може виявитися досить незграбним і змушує вдатися до динамічного формування запитів з усіма витікаючими наслідками; якщо ж згадати, що plpgsql для динамічних запитів не зберігає план, то у випадках складних запитів може бути значною проблемою.
Читати далі →

PostgreSQL 9.5: що нового? Частина 3. GROUPING SETS, CUBE, ROLLUP

Продовжуємо знайомитися з новими можливостями PostgreSQL 9.5.
Частина 1. INSERT… ON CONFLICT DO NOTHING/UPDATE ROW LEVEL SECURITY
Частина 2. TABLESAMPLE
Сьогодні розглянемо множинні угруповання в одному запиті. Ця можливість була описана ще в стандарті SQL-99. Її зручно застосовувати в тому випадку, якщо вам потрібно зробити кілька запитів до однієї і тієї ж таблиці, які відрізняються лише умовою в GROUP BY. Для цього модифікатори GROUPING SETS, ROLLUP, CUBE зазначаються в якості елемента угруповання після ключового слова GROUP BY.
Давайте подивимося ближче, як це працює.

Читати далі →

PostgreSQL 9.5: що нового? Частина 2. TABLESAMPLE

Продовжуємо огляд нововведень в PostgreSQL 9.5. Перша частина тут.
Від автораПриношу свої вибачення за затримку з випуском другої частини. Спочатку я планував випустити другу частину статті через тиждень після першої, але, у зв'язку з великою зайнятістю, не зміг цього зробити. Тому я вирішив, що буду публікувати не великі статті, а невеликими порціями, але частіше.
Читати далі →