|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
Приветствую! В PG существует Server Programming Interface (SPI). Я правильно понимаю, что при падении вызванной через него внешней функции упадёт весь сервер целиком? И что эта функция может случайно залезть не в ту часть памяти что ей нужно и незаметно непоправимо испортить какие-нибудь данные? Если да, то как этого избежать? Например, может существует (быстрая!) прослойка для безопасного вызова внешних функций с учётом вышеперечисленного? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2019, 15:51 |
|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
WeedПриветствую! В PG существует Server Programming Interface (SPI). Я правильно понимаю, что при падении вызванной через него внешней функции упадёт весь сервер целиком? И что эта функция может случайно залезть не в ту часть памяти что ей нужно и незаметно непоправимо испортить какие-нибудь данные? Если да, то как этого избежать? Например, может существует (быстрая!) прослойка для безопасного вызова внешних функций с учётом вышеперечисленного? Очевидно что нет по причинам того как устроен язык С. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2019, 15:55 |
|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
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 выполняются в контексте и с правами базы. И при ошибках реализации можно уронить или вовсе повредить весь кластер. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2019, 16:14 |
|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
Maxim Boguk, хорошо, да, согласен. Тогда вопрос по-другому поставлю: Есть ли способ определять функции и соответствующая "прокладка" для отправки и получения данных от локальных демонов? О DbLink-подобных способах мне известно - но это ведь будет сильно медленно? У нас есть задача вызывать сложный математический алгоритм при каждом изменении строки в одной из таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2019, 16:17 |
|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
WeedУ нас есть задача вызывать сложный математический алгоритм при каждом изменении строки в одной из таблиц. а потом что с этим делать? Например, можно сделать logical decoding и получать изменения по протоколу логической репликации. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2019, 16:31 |
|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
MelkijWeedНапример, может существует (быстрая!) прослойка для безопасного вызова внешних функций с учётом Я правильно понимаю, что при падении вызванной через него внешней функции упадёт весь сервер целиком? Вопрос звучит странно, но вероятно вы не очень поняли что такое SPI. Это интерфейс позволяющие из C делать рядовые SQL запросы к базе. [...] А возможность на C делать свои расширения (в том числе использовать в них SPI) - это отдельно. Да, расширения на C выполняются в контексте и с правами базы. И при ошибках реализации можно уронить или вовсе повредить весь кластер. Я понял что мне SPI нужен как путь (способ) создавать свои внутренние функции, в том числе аггрегатные. Всё так? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2019, 17:00 |
|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
MelkijWeedУ нас есть задача вызывать сложный математический алгоритм при каждом изменении строки в одной из таблиц. а потом что с этим делать? Складывать рядышком в той же или соседней таблице Например, можно сделать logical decoding и получать изменения по протоколу логической репликации. Первый раз про эти штуки слышу. Можете чуть-чуть развернуть эту мысль? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2019, 17:02 |
|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
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 Сильно подробно рассказать не смогу. Я временами ковыряю патчи к самой базе, а логическую репликацию писать не доводилось, знаю только что такое есть и местами активно используется. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2019, 18:12 |
|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
Melkij, спасибо, ознакомлюсь! А сообщество не создало чего-то типа обёртки, которое аргументы функции, запрошенной из самого PG демона завернёт в, предположим, Bson, вместе с названием и не вызовет чем-то вроде RPC? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2019, 21:57 |
|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
WeedMelkij, спасибо, ознакомлюсь! А сообщество не создало чего-то типа обёртки, которое аргументы функции, запрошенной из самого PG демона завернёт в, предположим, Bson, вместе с названием и не вызовет чем-то вроде RPC? Я это всё к чему: БД штука "живая" - схема, бывает, меняется вместе с данными "на лету". Очень бы хотелось некоторые наши функции иметь не снаружи базы (это текущий вариант), а внутри, чтобы авторы БД могли иметь возможность если что делать привычными способами (миграциями может даже) изменения в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2019, 22:00 |
|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
Weedи не вызовет чем-то вроде RPC? Если уместна какая-то форма RPC - то это противоречит указанной в теме цели. Может быть вовсе какой-то из существующих PL? Вряд ли из pl/pgsql выйдет хорошая числодробилка, но в качестве pl биндинги есть к разным извращениям, хоть pl/java. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2019, 11:34 |
|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
MelkijWeedи не вызовет чем-то вроде RPC? Если уместна какая-то форма RPC - то это противоречит указанной в теме цели. Может быть вовсе какой-то из существующих PL? Вряд ли из pl/pgsql выйдет хорошая числодробилка, но в качестве pl биндинги есть к разным извращениям, хоть pl/java. К нашему пока нету - мы на Dlang. А написать ради пары функций пока ещё не готовы. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2019, 08:35 |
|
Безопасность SPI: как дёргать падучий код?
|
|||
---|---|---|---|
#18+
MelkijWeedи не вызовет чем-то вроде RPC? Если уместна какая-то форма RPC - то это противоречит указанной в теме цели. Да, название темы уже не соответствует. И RPC нужен только локальный - процесс будет крутиться на этой же машине, иначе смысла во всём этом нет. Короче говоря, нужен способ писать функции на своём языке так, чтобы ошибка в них не заваливала весь сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2019, 18:24 |
|
|
start [/forum/topic.php?fid=53&msg=39778043&tid=1995318]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 18ms |
total: | 163ms |
0 / 0 |