|
|
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
|