У меня есть сервер PostgreSQL 9.0 в Ubuntu 10.04, и я пытаюсь создать триггер в коде C, перейдя по следующим ссылкам:
Документация , Компиляция
Пока мой код должен показывать только значение столбца в записи (и возвращать «отредактированную» запись):
#include "postgres.h"
#include "executor/spi.h"
#include "commands/trigger.h"
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
extern Datum trigger_test(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(trigger_test);
Datum
trigger_test(PG_FUNCTION_ARGS)
{
TriggerData *trigdata = (TriggerData *) fcinfo->context;
TupleDesc tupdesc;
HeapTuple rettuple;
if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event))
rettuple = trigdata->tg_newtuple;
else
rettuple = trigdata->tg_trigtuple;
tupdesc = trigdata->tg_relation->rd_att;
bool isnull = false;
int64 att = DatumGetInt64(heap_getattr(rettuple, 2, tupdesc, &isnull));
elog(INFO,"Value second column is: %d",att);
return PointerGetDatum(rettuple);
}
Этот файл находится по тому же пути, что и postgres.h , и есть файлы: executor / spi.h и command / trigger.h . Однако когда я запускаю команду:
cc -fpic -c trigger_test.c
Я получаю ошибки:
In file included from postgres.h:48,
from trigger_test.c:1:
utils/elog.h:69:28: error: utils/errcodes.h: Not exists the file or directory
In file included from trigger_test.c:2:
executor/spi.h:16:30: error: nodes/parsenodes.h: Not exists the file or directory
executor/spi.h:17:26: error: utils/portal.h: Not exists the file or directory
executor/spi.h:18:28: error: utils/relcache.h: Not exists the file or directory
executor/spi.h:19:28: error: utils/snapshot.h: Not exists the file or directory
...
Все файлы существуют, и я не хочу менять все включенные в файлы файлы: elog.h , spi.h и т. Д. Для возможных последствий. Кто-нибудь настраивал такие триггеры и может сказать мне, где я не прав?
Заранее спасибо.