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!