Search Postgresql Archives

hi, how to let the inserted tuple visible to other backend when current backend hasn't finish?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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!


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux