hi, how to let the inserted tuple visible to other backend when current backend hasn't finish? - Mailing list pgsql-general

From sunpeng
Subject hi, how to let the inserted tuple visible to other backend when current backend hasn't finish?
Date
Msg-id AANLkTine4v+i_LsVYsj2zJf4Kutb=b+MXiZkFg4s2mF_@mail.gmail.com
Whole thread Raw
Responses Re: hi, how to let the inserted tuple visible to other backend when current backend hasn't finish?  (Merlin Moncure <mmoncure@gmail.com>)
List pgsql-general
hi, These codes are in the postgresql engine, just assume they are in PortalRun() function:
//1.create table structure
char *relname = "test";
...
relOid = heap_create_with_catalog(relname, ....);
CommandCounterIncrement();
...
//2.then i can use SPI_execute to create index on this created table
SPI_connect();
char *sqlCreate_index ="create index on test....."
int ret = SPI_execute(sqlCreate_index , false, 1);
SPI_finish();
.....
//3.until now it performs well,but after i insert a tuple in this table
....
Relation mcir_relation = relation_open(relOid); //the relation just created
HeapTupleData htup;
....
simple_heap_insert(relation, &htup);
CommandCounterIncrement();
...
//4.then again want to invoke SPI_execute("select...."), it seems the inserted tuple is not visible to SPI_execute()
SPI_connect();
int ret =  SPI_execute("select * from test;", true, 1);
if (ret == SPI_OK_SELECT && SPI_processed == 1 ) {
....
}

the ret is SPI_OK_SELECT ,but  SPI_processed == 0, the inserted tuple is not visible to SPI_execute() .
 i've used these methods to try to let it visible to SPI_execute() :
simple_heap_insert()....
CommandCounterIncrement();
or:
BeginInternalSubTransaction(NULL);
simple_heap_insert()...
ReleaseCurrentSubTransaction();
....
but they all don't work, how to resolve it? 
thanks!

pgsql-general by date:

Previous
From: Nick
Date:
Subject: Is there a bug in FOR i IN 1..10 LOOP (8.4.4)?
Next
From: adi hirschtein
Date:
Subject: Monitoring Object access