Thread: "no snapshot has been set" error
Hi all, I encountered a problem when I'm implementing my user-defined type. My user-defined type is defined as CREATE TYPE X ( INTERNALLENGTH = 10 INPUT = X_in, OUTPUT = X_out ); In my X_in() function, I want to access other table to do some bookkeeping stuff. this table keeps track of the number of calls to X_in(). However, while SPI_connect() returns SPI_OK_CONNECT, whenever I execute SPI_exec( "SELECT count FROM XTABLE", 0), postgres stops executing and issues "Error: no snapshot has been set". Does anyone here knows what happens? Am I not allowed to use SPI functions in this situation? Thank you for your advice and suggestions in advance. Ruey-Lung Hsiao
Ruey-Lung Hsiao <rlhsiao@gmail.com> writes: > In my X_in() function, I want to access other table to do some > bookkeeping stuff. this table keeps track of the number of calls to > X_in(). However, while SPI_connect() returns SPI_OK_CONNECT, whenever I > execute SPI_exec( "SELECT count FROM XTABLE", 0), postgres stops > executing and issues "Error: no snapshot has been set". Are you sure you've diagnosed this correctly? AFAICS it's not possible to get into SPI without having set a snapshot. Depending on what PG version you're using (which you did not say, naughty naughty) there are paths in interactive query entry that might try to execute datatype input functions before setting the query snapshot. But I don't believe it can happen down inside SPI. I'd be interested to see a complete counterexample. regards, tom lane