Atualmente, tenho uma função no PostgreSQL que cria uma tabela temporária, a preenche, executa algumas seleções complicadas e retorna resultados. As tabelas temporárias do postgresql são locais para funções, portanto, isso me ajuda a evitar a introdução de outra coluna em minha tabela temporária para marcar todas as linhas inseridas por uma execução específica da função. Se eu usasse uma tabela global que seria necessária e, devido à natureza das minhas consultas, isso prejudicaria o desempenho.
Quero portar este trecho de código para o VoltDB, mas ele não oferece suporte à criação de tabelas temporárias a partir de procedimentos armazenados. Isso me fez pensar em outras abordagens. Se um procedimento armazenado iniciasse uma transação e excluísse todas as linhas em uma tabela (não temporária), o que aconteceria com outras execuções do mesmo procedimento armazenado em execução naquele momento?
Ou se, após a exclusão, o procedimento armazenado começar a inserir linhas e outra sessão invocar o mesmo sp, que desejará excluir todas as linhas novamente, o que fazer?
Resumindo, posso criar uma visão local (para execução sp) de dados dentro de uma transação excluindo todas as linhas, inserindo algumas linhas, realizando consultas nas linhas inseridas e excluindo todas as linhas novamente antes que a execução sp termine (e a transação seja confirmada )?
Isso me permitiria evitar o uso de uma coluna rowset_id para as linhas temporárias, evitando junções muito mais lentas (essa é uma implementação de EAV).
O comentário de a_horse_with_no_name é na verdade a resposta, mas como não foi postado como resposta, não posso marcá-lo como tal. Esqueci completamente os níveis de isolamento de transação, fiz a pergunta nos fóruns do VoltDB e parece que, desde que tenha certeza de que os procedimentos armazenados são locais para os nós (desculpe, isso é um pouco da terminologia do VoltDB), ou seja , eles não processam dados em tabelas particionadas, isso deve funcionar.