powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Безопасность SPI: как дёргать падучий код?
13 сообщений из 13, страница 1 из 1
Безопасность SPI: как дёргать падучий код?
    #39778029
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!

В PG существует Server Programming Interface (SPI).

Я правильно понимаю, что при падении вызванной через него внешней функции упадёт весь сервер целиком? И что эта функция может случайно залезть не в ту часть памяти что ей нужно и незаметно непоправимо испортить какие-нибудь данные?

Если да, то как этого избежать?
Например, может существует (быстрая!) прослойка для безопасного вызова внешних функций с учётом вышеперечисленного?
...
Рейтинг: 0 / 0
Безопасность SPI: как дёргать падучий код?
    #39778030
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WeedПриветствую!

В PG существует Server Programming Interface (SPI).

Я правильно понимаю, что при падении вызванной через него внешней функции упадёт весь сервер целиком? И что эта функция может случайно залезть не в ту часть памяти что ей нужно и незаметно непоправимо испортить какие-нибудь данные?

Если да, то как этого избежать?
Например, может существует (быстрая!) прослойка для безопасного вызова внешних функций с учётом вышеперечисленного?

Очевидно что нет по причинам того как устроен язык С.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Безопасность SPI: как дёргать падучий код?
    #39778041
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WeedНапример, может существует (быстрая!) прослойка для безопасного вызова внешних функций с учётом вышеперечисленного?
Не существует, с чем есть пара багов обработки xml из-за ошибок в libxml для самой базы.

WeedВ PG существует Server Programming Interface (SPI).

Я правильно понимаю, что при падении вызванной через него внешней функции упадёт весь сервер целиком?
Вопрос звучит странно, но вероятно вы не очень поняли что такое SPI. Это интерфейс позволяющие из C делать рядовые SQL запросы к базе.
The Server Programming Interface (SPI) gives writers of user-defined C functions the ability to run SQL commands inside their functions. SPI is a set of interface functions to simplify access to the parser, planner, and executor. SPI also does some memory management.
Поэтому для SPI нет разницы, что вы запускаете, это будет вполне рядовой SQL и пара функций вокруг для получения результатов.

А возможность на C делать свои расширения (в том числе использовать в них SPI) - это отдельно.
Да, расширения на C выполняются в контексте и с правами базы. И при ошибках реализации можно уронить или вовсе повредить весь кластер.
...
Рейтинг: 0 / 0
Безопасность SPI: как дёргать падучий код?
    #39778043
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk, хорошо, да, согласен.

Тогда вопрос по-другому поставлю:
Есть ли способ определять функции и соответствующая "прокладка" для отправки и получения данных от локальных демонов?

О DbLink-подобных способах мне известно - но это ведь будет сильно медленно?

У нас есть задача вызывать сложный математический алгоритм при каждом изменении строки в одной из таблиц.
...
Рейтинг: 0 / 0
Безопасность SPI: как дёргать падучий код?
    #39778048
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WeedУ нас есть задача вызывать сложный математический алгоритм при каждом изменении строки в одной из таблиц.
а потом что с этим делать?
Например, можно сделать logical decoding и получать изменения по протоколу логической репликации.
...
Рейтинг: 0 / 0
Безопасность SPI: как дёргать падучий код?
    #39778075
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijWeedНапример, может существует (быстрая!) прослойка для безопасного вызова внешних функций с учётом Я правильно понимаю, что при падении вызванной через него внешней функции упадёт весь сервер целиком?
Вопрос звучит странно, но вероятно вы не очень поняли что такое SPI. Это интерфейс позволяющие из C делать рядовые SQL запросы к базе.
[...]
А возможность на C делать свои расширения (в том числе использовать в них SPI) - это отдельно.
Да, расширения на C выполняются в контексте и с правами базы. И при ошибках реализации можно уронить или вовсе повредить весь кластер.

Я понял что мне SPI нужен как путь (способ) создавать свои внутренние функции, в том числе аггрегатные. Всё так?
...
Рейтинг: 0 / 0
Безопасность SPI: как дёргать падучий код?
    #39778076
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijWeedУ нас есть задача вызывать сложный математический алгоритм при каждом изменении строки в одной из таблиц.
а потом что с этим делать?

Складывать рядышком в той же или соседней таблице

Например, можно сделать logical decoding и получать изменения по протоколу логической репликации.

Первый раз про эти штуки слышу. Можете чуть-чуть развернуть эту мысль?
...
Рейтинг: 0 / 0
Безопасность SPI: как дёргать падучий код?
    #39778102
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WeedЯ понял что мне SPI нужен как путь (способ) создавать свои внутренние функции, в том числе аггрегатные. Всё так?
Нет, вам для этого не нужен SPI.
Вам нужен вот этот раздел мануала: https://www.postgresql.org/docs/current/server-programming.html
А конкретнее страницы: https://www.postgresql.org/docs/current/xfunc-c.html - как в принципе модуль со своими функциями пишется/собирается
https://www.postgresql.org/docs/current/xaggr.html - как поверх собирается аггрегирующая функция (плюс не пропуститена предыдущей странице Support Functions for Aggregates)
Ну и исходники самой базы и contrib'ов в помощь. Почти все собственные функции через эту самую Version 1 Calling Conventions и сделано.

Возможно книга PostgreSQL Server Programming (Hannu Krosing, Jim Mlodgenski, Kirk Roybal). Читал давно, но вроде там тоже хорошие примеры написания расширения на C.

WeedПервый раз про эти штуки слышу. Можете чуть-чуть развернуть эту мысль?
https://www.postgresql.org/docs/current/logicaldecoding-explanation.html
Сильно подробно рассказать не смогу. Я временами ковыряю патчи к самой базе, а логическую репликацию писать не доводилось, знаю только что такое есть и местами активно используется.
...
Рейтинг: 0 / 0
Безопасность SPI: как дёргать падучий код?
    #39778153
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij, спасибо, ознакомлюсь!

А сообщество не создало чего-то типа обёртки, которое аргументы функции, запрошенной из самого PG демона завернёт в, предположим, Bson, вместе с названием и не вызовет чем-то вроде RPC?
...
Рейтинг: 0 / 0
Безопасность SPI: как дёргать падучий код?
    #39778154
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WeedMelkij, спасибо, ознакомлюсь!

А сообщество не создало чего-то типа обёртки, которое аргументы функции, запрошенной из самого PG демона завернёт в, предположим, Bson, вместе с названием и не вызовет чем-то вроде RPC?

Я это всё к чему: БД штука "живая" - схема, бывает, меняется вместе с данными "на лету". Очень бы хотелось некоторые наши функции иметь не снаружи базы (это текущий вариант), а внутри, чтобы авторы БД могли иметь возможность если что делать привычными способами (миграциями может даже) изменения в БД.
...
Рейтинг: 0 / 0
Безопасность SPI: как дёргать падучий код?
    #39778220
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Weedи не вызовет чем-то вроде RPC?
Если уместна какая-то форма RPC - то это противоречит указанной в теме цели.

Может быть вовсе какой-то из существующих PL? Вряд ли из pl/pgsql выйдет хорошая числодробилка, но в качестве pl биндинги есть к разным извращениям, хоть pl/java.
...
Рейтинг: 0 / 0
Безопасность SPI: как дёргать падучий код?
    #39778372
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijWeedи не вызовет чем-то вроде RPC?
Если уместна какая-то форма RPC - то это противоречит указанной в теме цели.

Может быть вовсе какой-то из существующих PL? Вряд ли из pl/pgsql выйдет хорошая числодробилка, но в качестве pl биндинги есть к разным извращениям, хоть pl/java.

К нашему пока нету - мы на Dlang. А написать ради пары функций пока ещё не готовы.
...
Рейтинг: 0 / 0
Безопасность SPI: как дёргать падучий код?
    #39778471
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijWeedи не вызовет чем-то вроде RPC?
Если уместна какая-то форма RPC - то это противоречит указанной в теме цели.

Да, название темы уже не соответствует.

И RPC нужен только локальный - процесс будет крутиться на этой же машине, иначе смысла во всём этом нет.

Короче говоря, нужен способ писать функции на своём языке так, чтобы ошибка в них не заваливала весь сервер.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Безопасность SPI: как дёргать падучий код?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]