[#] Доступ к таблицам из Си расширений для Postgres
habrabot(difrex,1) — All
2015-12-04 14:00:04


![][1]

#

В этот раз я расскажу не про использование Python или очередной трюк с CSS/HTML и, увы, не про то, как я 5 лет портировал , а про один важный аспект написания расширений для замечательной СУБД PostgresSQL. На самом деле, уже есть достаточно много статей о том, как написать расширение для Postgres на Си (к примеру, [эта][2]), в том числе и на [русском языке][3]. Но, как правило, в них описываются достаточно простые случаи. В этих статьях и инструкциях авторы реализуют функции, которые получают на вход данные, как-то их обрабатывают, а затем возвращают одно число, строку или пользовательский тип. В них нет пояснений, что делать, если из Си кода нужно пробежаться по обычной таблице, существующей в базе, или индексу. К таблицам из Си можно получить доступ через хорошо описанный но медленный [SPI (Server Programming Interface)][4], так же есть очень сложный способ, через буферы, а я расскажу про компромиссный вариант. Под катом я постарался дать примеры кода с подробными пояснениями. [Читать дальше →][5]

[1]: https://habrastorage.org/files/2a6/2dd/a49/2a62dda4945046da953fb7a63baa5cb6.png
[2]: http://www.postgresql.org/docs/devel/static/xfunc-c.html
[3]: http://www.sai.msu.su/~megera/postgres/talks/gist_tutorial.html
[4]: http://www.postgresql.org/docs/9.4/static/spi.html
[5]: http://habrahabr.ru/post/272257/#habracut