Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Hаписание триггера PgSQL на C   Andrey Y. Mosienko   15 May 2002 10:21:43 
Архивное /ru.unix.bsd/15155821c368.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional