Причина, чому це працює в PostgreSQL, полягає в тому, що системні каталоги є звичайними таблицями. Наприклад, для створення нової функції потрібно просто вставити рядок уpg_proc
таблицю, зміна значення стовпця за замовчуванням просто потребує оновлення до деякого рядка в pg_attrdef
тощо. Оскільки таблиці так чи інакше є транзакційними, вам майже доведеться виходити зі свого шляху, щоб не працювати так. (Тут пропущено багато хворобливих деталей щодо впровадження. ;-))
Я думаю, не знаючи вихідного коду, що інші двигуни бази даних використовують деякі власні внутрішні структури для представлення інформації про їх системний каталог. І тому їм доведеться докласти додаткових зусиль, ймовірно, багато додаткових зусиль, щоб зробити транзакційний DDL роботу, і це, мабуть, не для них пріоритет.
Зворотний бік цього полягає в тому, що це є причиною того, що основні оновлення версій PostgreSQL настільки болючі. Інші продукти, мабуть, можуть спроектувати свої внутрішні структури метаданих з урахуванням змін та оновлень, і тому немає проблем з оновленням до нової основної версії. У PostgreSQL немає способу змінити таблицю системного каталогу, щоб раптом виглядати як новіша версія таблиці системного каталогу, принаймні, не підтримуючи систему в Інтернеті, оскільки це вимагало б доступу до системних каталогів. Ургу.