Transaction control in a C language function

From: Flaris Feller <flaris(dot)feller(at)gmail(dot)com>
To: pgsql-interfaces(at)lists(dot)postgresql(dot)org
Subject: Transaction control in a C language function
Date: 2023-03-06 10:36:32
Message-ID: CANNsrHt-3wC-nGG_owzfKfx+N-sHWFuJQ=QEivGrXGK2_ne0xA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-interfaces

Hello all,

I would like to implement transaction control in a function implemented in
C language. Currently I'm using SPI to do the job.
When calling SPI_commit() it returns this error message:
SQL Error [XX000]: ERROR: portal snapshots (0) did not account for all
active snapshots (1)
Below, there is an example.

PG_FUNCTION_INFO_V1(my_commit);

Datum my_commit(PG_FUNCTION_ARGS)
{
SPIExecuteOptions execopts;

SPI_connect_ext(SPI_OPT_NONATOMIC);

memset(&execopts, 0, sizeof(execopts));
execopts.params = NULL;
execopts.read_only = false;
execopts.allow_nonatomic = true;
execopts.must_return_tuples = false;
execopts.tcount = 0;
execopts.dest = NULL;
execopts.owner = NULL;

/* Execute some SQL commands */
SPI_execute_extended("UPDATE mytable SET name = 'done'", &execopts);

/* Commit the transaction */
SPI_commit();

SPI_finish();

PG_RETURN_NULL();
}

Thanks in advance,
Flaris Feller

Responses

Browse pgsql-interfaces by date

  From Date Subject
Next Message Tom Lane 2023-03-06 15:21:30 Re: Transaction control in a C language function
Previous Message Трофимов Иван 2023-03-05 02:42:06 About default inBufSize (connection read buffer size) in libpq