2010-06-14 4 views
2

Où puis-je trouver la table temporaire créée dans les dossiers posgresql?!? Si je choisis * à partir de temp_table; que j'ai eu le résultat, mais ne peut pas voir la structure de ma base de données dans le PgAdmin ?!Où est créée la table temporaire?

Répondre

4

Les tables temporaires sont placées dans un schéma appelé "pg_temp_NNN", où "NNN" indique le serveur auquel vous êtes connecté. Ceci est implicitement ajouté à votre chemin de recherche dans la session qui les crée. Notez que vous ne pouvez pas accéder aux tables temporaires d'une connexion via une autre connexion ... donc, en fonction de la manière dont pgAdmin organise ses connexions, même pouvoir trouver les tables dans l'explorateur d'objets peut ne pas être utile.

+1

pgAdmin utilise des connexions séparées pour le navigateur d'objet et l'outil de requête, de sorte il ne sera pas possible de voir les tables temporaires de cette façon. –

+0

Combien cela coûte-t-il de créer une table temporaire? Est-ce équivalent à créer une structure de données en mémoire? – Peter

+0

Comment puis-je obtenir le nom de ce schéma temporaire? J'ai besoin de sortir la définition de table de information_schema.tables pour que l'alias "pg_temp" ne me soit d'aucune utilité. – PhilHibbs

0

Voici une façon d'obtenir le nom du pg_temp_ nnn schéma pour votre session:

select distinct 'pg_temp_'||sess_id from pg_stat_activity where procpid = pg_backend_pid() 

Cela permettra d'identifier la session qui exécute cette instruction SQL lui-même, et renvoie l'identifiant de session qu'il tourne sous.

Vous pouvez ensuite utiliser pour lister toutes vos tables temporaires:

select * 
from information_schema.tables 
where table_schema = 
    (select distinct 'pg_temp_'||sess_id 
    from pg_stat_activity 
    where procpid = pg_backend_pid() 
) 

Ou pour obtenir la structure de la table:

select * 
from information_schema.columns 
where table_schema = 
    (select distinct 'pg_temp_'||sess_id 
    from pg_stat_activity 
    where procpid = pg_backend_pid() 
) 
and table_name = 'my_temp_table' 
order by ordinal_position 
+0

S'il vous plaît modifier votre réponse pour fournir plus de détails. – Gray

+1

'sélectionner nspname de pg_namespace où oid = pg_my_temp_schema();' est beaucoup plus court –

Questions connexes