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

Поиск
Список
Период
Сортировка
От sunpeng
Тема hi, how to let the inserted tuple visible to other backend when current backend hasn't finish?
Дата
Msg-id AANLkTine4v+i_LsVYsj2zJf4Kutb=b+MXiZkFg4s2mF_@mail.gmail.com
обсуждение исходный текст
Ответы Re: hi, how to let the inserted tuple visible to other backend when current backend hasn't finish?  (Merlin Moncure <mmoncure@gmail.com>)
Список 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 по дате отправления:

Предыдущее
От: Nick
Дата:
Сообщение: Is there a bug in FOR i IN 1..10 LOOP (8.4.4)?
Следующее
От: adi hirschtein
Дата:
Сообщение: Monitoring Object access