Як отримати Postgres у списку поточних заданих точок збереження?


13

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

Якщо точніше: я хотів би перевірити, яке ім’я НЕ викликає помилку "немає такої точки збереження" у з'єднанні.

Відповіді:


8

Цікаве запитання! Коротка відповідь: ні .

Довга відповідь: не існує жодного існуючого способу визначення списку точок збереження. Ще гірше, здається, що неможливо створити розширення PostgreSQL, яке дозволило б вам це зробити: переглядаючи src / backend / access / transam / xact.c , ви можете побачити такі функції, як RollbackToSavepoint (саме там, де "немає такого savepoint "повідомлення про помилку, про яке ви згадали) покладається на змінну CurrentTransactionState, яка оголошена статичною для xact.c, тобто не була б видима глобально коду розширення.

Тепер, якщо ви були сміливими і дуже відчайдушно створювали список визначених точок збереження з боку сервера (на відміну від того, щоб ваш клієнт пам'ятав ...), ви можете додати допоміжну функцію до xact.c, яка відображатиме це інформація для вас. Насправді ось такий патч . Це дуже брутальний патч лише для ілюстрації, і він просто реєструє імена точок збереження, він справді повинен повертати ці імена як текст тексту.

Щодо того, чому ця функція відсутня, я вважаю, що просто не існує правдоподібного випадку використання для клієнта, який потребує отримання списку визначених точок збереження з сервера. Що б клієнт робив із цим списком - просто обрав його навмання і ROLLBACKдо нього? ROLLBACKдо останнього сліпо? Точки збереження AFAICT корисні лише в тому випадку, якщо клієнт пам’ятає, які точки збереження він визначив і де вони були, щоб мати можливість їх використовувати.


Дякую за цю відповідь. Клієнт повинен пам'ятати, звичайно, але у випадку складного багатопотокового доступу до одного з'єднання, це буде корисно налагодити код клієнта! І більше доступної інформації часто краще, ніж менше ІМХО.
vaab

Так, для запуску коду це не має сенсу. Але для налагодження було б корисно побачити, які точки збереження відкриті. Спасибі за вашу відповідь.
гуетлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.