Daniel Cordeiro escreveu:
Olá Everaldo,
Obrigado pela ajuda, infelismente não funcionou como eu esperava.
Eu preciso saber se a tabela da minha sessão foi criado, mas o que
acontece é que a consulta que você me passou vai me mostrar a tabela
temporária de todas as sessões. E não somente a minha.
Na verdade, o que acontece comigo é que como uso um sistema web com um
número muito alto de requisições, preciso manter minha conexão
persistente. A cada recarregamneto da tela, eu tenho que ver se a tabela
temporária existe (ou caso a conexão tenha se expirado), se não
exisitir, eu a crio e preencho com informações baśicas recolhidas da
sessão do PHP.
Eu estava fazendo o trabalho sempre removendo e recriando as funções com
o comando DROP IF EXIST, só que eu não sabia que as procedures quando
são executadas na seção, são na verdade COMPILADAS no momento da sua
primeira execução, de tal forma que as informações da tabela que ele
extrai são registrados na procedure através dos OIDS. Como os OIDS mudam
porque eu sempre recriava a tabela temporária, mas a seção não era
expirada, não consequia realizar as operações que desejava porque dava
um erro, pois a procedure procurava os dados em um OID inexistente.
Utilize o EXECUTE para a criação da tabela temporária.
http://www.postgresql.org/docs/8.2/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN
"Unlike all other commands in PL/pgSQL, a command run by an EXECUTE
statement is not prepared and saved just once during the life of the
session. Instead, the command is prepared each time the statement is run."
Como as vezes eu não sei quando a seção foi expirada, não tem como eu
ficar a cada requisição removendo e recriando a tabela, mas o espaço
ocupado não é meu problema.
Muito obrigado pela sua ajuda.
Daniel Cordeiro
Evandro Ricardo Silvestre escreveu:
Daniel,
Tente o seguinte:
SELECT a.relname AS tabela
FROM pg_class a
WHERE (a.relkind = 'r') and relnamespace <> 2200
Vai te retornar todas as tabelas temporárias.
Sinceramente, não confio em fazer acesso a tabelas temporárias do jeito
que deseja fazer! Particularmente prefiro apagar a tabela temporária
sempre após o uso, para não ocupar espaço!
Att
Evandro
Daniel Cordeiro wrote:
Olá a todos mais uma vez,
Além do problema das conexões, gostaria de saber como descubro a tabela
temporária que esta ativa na seção corrente, pois gostaria de gravar
algumas informações nesta tabela temporária ( carregadas da seção do
PHP) para interagir diretamente através de gatilhos e procedures que se
baseam nestas informações ( e assim, tirando a necessidade de se passar
parâmetros para as procedures).
Estou usando PostGreSQL 8.2, e a única coisa que vi nesta versão é como
deletar a tabela com a comando DROP TABLE IF EXISTS.
Procurando pelas tabelas do sistema, eu encontrei a tabela com o
sequinte comando:
=#SELECT schemaname,tablename from pg_tables where tablename = 'teste';
O problema é que ela me retorna todas as tabelas temporárias de todas as
sessões ativas, da sequinte forma:
schemaname | tablename
------------+-----------
pg_temp_1 | teste
pg_temp_2 | teste
Gostaria de uma forma de descobrir se uma determinada tabela temporária
existe na MINHA SESSAO CORRENTE, para que, caso não exista, eu possa
cria-la na minha conexão persistente.
[]s
Osvaldo
_______________________________________________________
Yahoo! Mail - Sempre a melhor op��o para voc�!
Experimente j� e veja as novidades.
http://br.yahoo.com/mailbeta/tudonovo/
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/
Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios