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

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

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

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

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

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

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

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

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
22.02.2019, 16:14
    #39778041
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность SPI: как дёргать падучий код?
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
22.02.2019, 16:17
    #39778043
Weed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность SPI: как дёргать падучий код?
Maxim Boguk, хорошо, да, согласен.

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

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

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

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

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

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

Первый раз про эти штуки слышу. Можете чуть-чуть развернуть эту мысль?
...
Рейтинг: 0 / 0
22.02.2019, 18:12
    #39778102
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность SPI: как дёргать падучий код?
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
22.02.2019, 21:57
    #39778153
Weed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность SPI: как дёргать падучий код?
Melkij, спасибо, ознакомлюсь!

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

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

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

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

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

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

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

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

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


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