Ðлава 45. ÐнÑеÑÑÐµÐ¹Ñ Ð¿ÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑеÑвеÑа
СодеÑжание
- 45.1. ÐнÑеÑÑейÑнÑе ÑÑнкÑии
- SPI_connect â подклÑÑиÑÑ ÑÑнкÑÐ¸Ñ Ð½Ð° C к менеджеÑÑ SPI
- SPI_finish â оÑклÑÑиÑÑ ÑÑнкÑÐ¸Ñ Ð½Ð° C Ð¾Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑа SPI
- SPI_execute â вÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ
- SPI_exec â вÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÑÑениÑ/запиÑи
- SPI_execute_extended â вÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ñ Ð²ÑделеннÑми паÑамеÑÑами
- SPI_execute_with_args â вÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ñ Ð²ÑделеннÑми паÑамеÑÑами
- SPI_prepare â подгоÑовиÑÑ Ð¾Ð¿ÐµÑаÑоÑ, но пока не вÑполнÑÑÑ ÐµÐ³Ð¾
- SPI_prepare_cursor â подгоÑовиÑÑ Ð¾Ð¿ÐµÑаÑоÑ, но пока не вÑполнÑÑÑ ÐµÐ³Ð¾
- SPI_prepare_extended â подгоÑовиÑÑ Ð¾Ð¿ÐµÑаÑоÑ, но пока не вÑполнÑÑÑ ÐµÐ³Ð¾
- SPI_prepare_params â подгоÑовиÑÑ Ð¾Ð¿ÐµÑаÑоÑ, но пока не вÑполнÑÑÑ ÐµÐ³Ð¾
- SPI_getargcount â полÑÑиÑÑ ÑиÑло аÑгÑменÑов, ÑÑебÑÑÑÐ¸Ñ ÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ, подгоÑÐ¾Ð²Ð»ÐµÐ½Ð½Ð¾Ð¼Ñ ÑÑнкÑией
SPI_prepare- SPI_getargtypeid â полÑÑиÑÑ OID Ñипа аÑгÑменÑа Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑа, подгоÑовленного ÑÑнкÑией
SPI_prepare- SPI_is_cursor_plan â вÑдаÑÑ
true, еÑли опеÑаÑоÑ, подгоÑовленнÑй ÑÑнкÑиейSPI_prepare, можно иÑполÑзоваÑÑ ÑSPI_cursor_open- SPI_execute_plan â вÑполниÑÑ Ð¾Ð¿ÐµÑаÑоÑ, подгоÑовленнÑй ÑÑнкÑией
SPI_prepare- SPI_execute_plan_extended â вÑполниÑÑ Ð¾Ð¿ÐµÑаÑоÑ, подгоÑовленнÑй ÑÑнкÑией
SPI_prepare- SPI_execute_plan_with_paramlist â вÑполниÑÑ Ð¾Ð¿ÐµÑаÑоÑ, подгоÑовленнÑй ÑÑнкÑией
SPI_prepare- SPI_execp â вÑполниÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð² Ñежиме ÑÑениÑ/запиÑи
- SPI_cursor_open â оÑкÑÑÑÑ ÐºÑÑÑÐ¾Ñ Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑа, Ñозданного ÑÑнкÑией
SPI_prepare- SPI_cursor_open_with_args â оÑкÑÑÐ²Ð°ÐµÑ ÐºÑÑÑÐ¾Ñ Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑа Ñ Ð¿Ð°ÑамеÑÑами
- SPI_cursor_open_with_paramlist â оÑкÑÑÑÑ ÐºÑÑÑÐ¾Ñ Ñ Ð¿Ð°ÑамеÑÑами
- SPI_cursor_parse_open â оÑкÑÑÐ²Ð°ÐµÑ ÐºÑÑÑÐ¾Ñ Ð´Ð»Ñ ÑÑÑоки запÑоÑа и набоÑа паÑамеÑÑов
- SPI_cursor_find â найÑи ÑÑÑеÑÑвÑÑÑий кÑÑÑÐ¾Ñ Ð¿Ð¾ имени
- SPI_cursor_fetch â вÑбÑаÑÑ ÑÑÑоки ÑеÑез кÑÑÑоÑ
- SPI_cursor_move â пеÑемеÑÑиÑÑ ÐºÑÑÑоÑ
- SPI_scroll_cursor_fetch â вÑбÑаÑÑ ÑÑÑоки ÑеÑез кÑÑÑоÑ
- SPI_scroll_cursor_move â пеÑемеÑÑиÑÑ ÐºÑÑÑоÑ
- SPI_cursor_close â закÑÑÑÑ ÐºÑÑÑоÑ
- SPI_keepplan â ÑÐ¾Ñ ÑаниÑÑ Ð¿Ð¾Ð´Ð³Ð¾ÑовленнÑй опеÑаÑоÑ
- SPI_saveplan â ÑÐ¾Ñ ÑаниÑÑ Ð¿Ð¾Ð´Ð³Ð¾ÑовленнÑй опеÑаÑоÑ
- SPI_register_relation â ÑделаÑÑ ÑÑемеÑное именованное оÑноÑение доÑÑÑпнÑм по имени в запÑоÑÐ°Ñ SPI
- SPI_unregister_relation â ÑдалиÑÑ ÑÑемеÑное именованное оÑноÑение из ÑееÑÑÑа
- SPI_register_trigger_data â ÑделаÑÑ ÑÑемеÑнÑе даннÑе ÑÑиггеÑа доÑÑÑпнÑми в запÑоÑÐ°Ñ SPI
- SPI_finish â оÑклÑÑиÑÑ ÑÑнкÑÐ¸Ñ Ð½Ð° C Ð¾Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑа SPI
- SPI_connect â подклÑÑиÑÑ ÑÑнкÑÐ¸Ñ Ð½Ð° C к менеджеÑÑ SPI
- 45.2. ÐÑпомогаÑелÑнÑе инÑеÑÑейÑнÑе ÑÑнкÑии
- SPI_fname â опÑеделиÑÑ Ð¸Ð¼Ñ ÑÑолбÑа Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм номеÑом
- SPI_fnumber â опÑеделиÑÑ Ð½Ð¾Ð¼ÐµÑ ÑÑолбÑа Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм именем
- SPI_getvalue â полÑÑиÑÑ ÑÑÑоковое знаÑение Ñказанного ÑÑолбÑа
- SPI_getbinval â полÑÑиÑÑ Ð´Ð²Ð¾Ð¸Ñное знаÑение Ñказанного ÑÑолбÑа
- SPI_gettype â полÑÑиÑÑ Ð¸Ð¼Ñ Ñипа даннÑÑ Ñказанного ÑÑолбÑа
- SPI_gettypeid â полÑÑиÑÑ OID Ñипа даннÑÑ Ñказанного ÑÑолбÑа
- SPI_getrelname â возвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ Ñказанного оÑноÑениÑ
- SPI_getnspname â возвÑаÑÐ°ÐµÑ Ð¿ÑоÑÑÑанÑÑво имÑн Ñказанного оÑноÑениÑ
- SPI_result_code_string â возвÑаÑÐ°ÐµÑ ÐºÐ¾Ð´ оÑибки в виде ÑÑÑоки
- SPI_fnumber â опÑеделиÑÑ Ð½Ð¾Ð¼ÐµÑ ÑÑолбÑа Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм именем
- SPI_fname â опÑеделиÑÑ Ð¸Ð¼Ñ ÑÑолбÑа Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм номеÑом
- 45.3. УпÑавление памÑÑÑÑ
- SPI_palloc â вÑделиÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð² веÑÑ
нем конÑекÑÑе иÑполниÑелÑ
- SPI_repalloc â поменÑÑÑ Ð±Ð»Ð¾Ðº памÑÑи в веÑÑ Ð½ÐµÐ¼ конÑекÑÑе иÑполниÑелÑ
- SPI_pfree â оÑвободиÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð² веÑÑ Ð½ÐµÐ¼ конÑекÑÑе иÑполниÑелÑ
- SPI_copytuple â ÑкопиÑоваÑÑ ÑÑÑÐ¾ÐºÑ Ð² веÑÑ Ð½ÐµÐ¼ конÑекÑÑе иÑполниÑелÑ
- SPI_returntuple â подгоÑовиÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ Ð²Ð¾Ð·Ð²ÑаÑа в виде Datum
- SPI_modifytuple â ÑоздаÑÑ ÑÑÑокÑ, заменÑÑ Ð¾ÑделÑнÑе Ð¿Ð¾Ð»Ñ Ð² данной
- SPI_freetuple â оÑвободиÑÑ ÑÑÑокÑ, ÑазмеÑÑннÑÑ Ð² веÑÑ Ð½ÐµÐ¼ конÑекÑÑе иÑполниÑелÑ
- SPI_freetuptable â оÑвободиÑÑ Ð½Ð°Ð±Ð¾Ñ ÑÑÑок, ÑозданнÑй
SPI_executeили подобной ÑÑнкÑией- SPI_freeplan â оÑвободиÑÑ Ñанее ÑÐ¾Ñ ÑанÑннÑй подгоÑовленнÑй опеÑаÑоÑ
- SPI_repalloc â поменÑÑÑ Ð±Ð»Ð¾Ðº памÑÑи в веÑÑ Ð½ÐµÐ¼ конÑекÑÑе иÑполниÑелÑ
- SPI_palloc â вÑделиÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð² веÑÑ
нем конÑекÑÑе иÑполниÑелÑ
- 45.4. УпÑавление ÑÑанзакÑиÑми
- SPI_commit â заÑикÑиÑоваÑÑ ÑекÑÑÑÑ ÑÑанзакÑиÑ
- SPI_rollback â пÑеÑваÑÑ ÑекÑÑÑÑ ÑÑанзакÑиÑ
- SPI_start_transaction â ÑÑÑаÑевÑÐ°Ñ ÑÑнкÑиÑ
- SPI_rollback â пÑеÑваÑÑ ÑекÑÑÑÑ ÑÑанзакÑиÑ
- SPI_commit â заÑикÑиÑоваÑÑ ÑекÑÑÑÑ ÑÑанзакÑиÑ
- 45.5. ÐидимоÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в даннÑÑ
- 45.6. ÐÑимеÑÑ
ÐнÑеÑÑÐµÐ¹Ñ Ð¿ÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑеÑвеÑа (SPI, Server Programming Interface) даÑÑ ÑазÑабоÑÑикам полÑзоваÑелÑÑÐºÐ¸Ñ ÑÑнкÑий на C возможноÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SQL из ÑÐ²Ð¾Ð¸Ñ ÑÑнкÑий или пÑоÑедÑÑ. SPI пÑедÑÑавлÑÐµÑ Ñобой Ð½Ð°Ð±Ð¾Ñ Ð¸Ð½ÑеÑÑейÑнÑÑ ÑÑнкÑий, ÑпÑоÑаÑÑÐ¸Ñ Ð´Ð¾ÑÑÑп к анализаÑоÑÑ, планиÑовÑÐ¸ÐºÑ Ð¸ иÑполниÑÐµÐ»Ñ Ð·Ð°Ð¿ÑоÑов. Ð SPI еÑÑÑ Ñакже ÑÑнкÑии Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑÑÑ.
ÐÑимеÑание
ÐоÑÑÑпнÑе пÑоÑедÑÑнÑе ÑзÑки пÑедоÑÑавлÑÑÑ ÑазлиÑнÑе ÑÑедÑÑва Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ SQL-команд из ÑÑнкÑий. ÐолÑÑинÑÑво ÑÑÐ¸Ñ ÑÑедÑÑв оÑÐ½Ð¾Ð²Ð°Ð½Ñ Ð½Ð° SPI, Ñак ÑÑо ÑÑа докÑменÑаÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð° и Ñем, кÑо иÑполÑзÑÐµÑ ÑÑи ÑзÑки.
УÑÑиÑе, ÑÑо еÑли команда, вÑÐ·Ð²Ð°Ð½Ð½Ð°Ñ ÑеÑез SPI, пÑеÑÑваеÑÑÑ Ð¾Ñибкой, ÑпÑавление не возвÑаÑаеÑÑÑ Ð² ваÑÑ ÑÑнкÑÐ¸Ñ Ð½Ð° C. ÐмеÑÑо ÑÑого пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¾ÑÐºÐ°Ñ ÑÑанзакÑии или подÑÑанзакÑии, из коÑоÑой вÑзÑвалаÑÑ Ð²Ð°Ñа ÑÑнкÑиÑ. (ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ ÑдивиÑелÑнÑм Ñ ÑÑÑÑом Ñого, ÑÑо Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва ÑÑнкÑий SPI опиÑÐ°Ð½Ñ ÑоглаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ возвÑаÑÑ Ð¾Ñибок. Ðднако ÑÑи ÑоглаÑÐµÐ½Ð¸Ñ Ð¿ÑÐ¸Ð¼ÐµÐ½Ð¸Ð¼Ñ ÑолÑко к оÑибкам, вÑÑвлÑемÑм в ÑÐ°Ð¼Ð¸Ñ ÑÑнкÑиÑÑ SPI.) ÐолÑÑиÑÑ ÑпÑавление поÑле оÑибки можно, ÑолÑко оÑганизовав ÑобÑÑвеннÑÑ Ð¿Ð¾Ð´ÑÑанзакÑиÑ, окÑÑжаÑÑÑÑ Ð²ÑÐ·Ð¾Ð²Ñ SPI, в коÑоÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð° оÑибка.
ФÑнкÑии SPI вÑдаÑÑ Ð½ÐµÐ¾ÑÑиÑаÑелÑнÑй ÑезÑлÑÑÐ°Ñ Ð² ÑлÑÑае ÑÑпеÑ
а (либо ÑеÑез возвÑаÑаемое ÑелоÑиÑленное знаÑение, либо в глобалÑной пеÑеменной SPI_result, как опиÑано ниже). Ð ÑлÑÑае оÑибки вÑдаÑÑÑÑ Ð¾ÑÑиÑаÑелÑнÑй ÑезÑлÑÑÐ°Ñ Ð¸Ð»Ð¸ NULL.
Ð¤Ð°Ð¹Ð»Ñ Ð¸ÑÑ
одного кода, иÑполÑзÑÑÑие SPI, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÐºÐ»ÑÑаÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾ÑнÑй Ñайл executor/spi.h.