|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Andrey Y. Mosienko 2:5020/400 15 May 2002 10:21:43 To : All Subject : Hаписание триггера PgSQL на C -------------------------------------------------------------------------------- Hello All! Кто нибудь занимается(лся) написанием триггеров PgSQL на C? Есть вопросы по использованию: SPI_palloc(), SPI_repalloc() и SPI_pfree(). В частности не работает следующий пример: int ret, i; char* sql; char* fields_names; char* values; // Ok ... this is a trigger function ... // were we called from a trigger?? // if (!CALLED_AS_TRIGGER(fcinfo)) elog(ERROR, "archive: not fired by trigger manager"); // Connect to the SPI manager // if( (ret = SPI_connect()) == SPI_OK_CONNECT ) { fields_names = SPI_palloc(100); values = SPI_palloc(100); sql = SPI_palloc(40); for (i = 2; i < 10; i++) { SPI_repalloc(fields_names, i*100); SPI_repalloc(values, i*100); }; SPI_pfree(fields_names); SPI_pfree(values); SPI_pfree(sql); SPI_finish(); }; При установке триггера с этой функцией на какую-либо базу postmaster падает в кору. CREATE TABLE "base" ( "id" int4 DEFAULT nextval('base_id_seq'::text) NOT NULL, "field" text NOT NULL, "field_m" text NOT NULL, "field_n" text NOT NULL, "changed" timestamp NOT NULL DEFAULT NOW(), PRIMARY KEY ("id"), UNIQUE ("id") ); CREATE TRIGGER "archive" AFTER UPDATE OR DELETE ON base FOR EACH ROW EXECUTE PROCEDURE archive(); update base set field = 'test' where id = '1'; Любые идеи приветствуются. -- with respection Andrey Feofilactovich. e-mail: feo@ttn.ru, feo@feo.org.ru ICQ: 28073807 --- ifmail v.2.15dev5 * Origin: TUES (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/15155821c368.html, оценка из 5, голосов 10
|