Невозможно выполнить оператор SQL из расширения C - PullRequest
0 голосов
/ 23 марта 2012

У меня есть расширение C (код ниже), в котором я пытаюсь получить доступ к базе данных, но получаю следующую ошибку:

FATAL: cannot read pg_class without having selected a database at character 15

Как обойти эту проблему? Я не смог выяснить, как указать базу данных в SPI API.

Аналогичный код, если он запускается через триггер (вызывая функцию, которая обращается к той же базе данных), работает просто отлично - очевидно, база данных в этом случае неявна.

Код следует:

static void my_function(XactEvent event, void *arg) {
char   sql[512];
switch(event) {
case XACT_EVENT_COMMIT:
  if(SPI_connect() == SPI_OK_CONNECT)
  {
    snprintf(sql, sizeof(sql), "SELECT * FROM myschema.mytable;");
    if (SPI_OK_SELECT == SPI_execute(sql, true, 0))
    {
      // Rest of code...
    }
  }

Спасибо

D.

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

База данных всегда должна быть неявной, поскольку SPI предназначен только для использования функциями C, вызываемыми из сеанса базы данных. См. пример .

Как вы выполняете этот код?

0 голосов
/ 23 марта 2012

Я не знаком с SPI, но вам просто нужно отправить "use myDatabaseName;" первый

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