Создать триггер в C на PostgreSQL 9 - PullRequest
0 голосов
/ 30 января 2012

У меня есть сервер 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 и т. Д. Для возможных последствий. Кто-нибудь настраивал такие триггеры и может сказать мне, где я не прав?

Заранее спасибо.

1 Ответ

1 голос
/ 03 июня 2012

Вы забыли включить заголовок fmgr.h в свою функцию, чтобы магический блок мог работать попросту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...