On Wed, Jan 11, 2017 at 7:51 PM, John R Pierce <pie...@hogranch.com> wrote:
> On 1/11/2017 6:39 PM, Ian Lewis wrote: > >> Does this mean that a local temporary table created in one function in a >> database is visible globally throughout the database for the duration of >> the session? >> > > postgres temporary tables are only visible to the session that creates > them. all kind of wierdness would happen if they were somehow visible > outside that session, for instance what if another session is accessing one > of these hypothetical things, when the session that creates the temp table > exits ? and, how do you resolve name conflicts? if session 1 creates > temp table ABC, and session 2 creates temp table ABC, how would session 3 > know which one to use? conversely, if each session creates unique > names, they'd have to build every sql statement from string fragments, this > is considered poor practice, and how would session 3 know what unique name > to use for one of these other sessions shared temporary tables? all > very confusing. > > > so I'm still not clear here what it is you expect these 'global temp > tables' to do, and how they are supposed to behave? "throughout" mustn't mean "by other sessions" or this becomes unwieldy. Here's a mock-up: CREATE TABLE template_table (); CREATE VIEW view_over_my_template_instance AS SELECT * FROM my_instance_of_template_table; --fails if done here without the desired feature In a given session: CREATE TEMP TABLE my_instance_of_template_table LIKE template_table; SELECT * FROM view_over_my_template_table; -- returns only this session's temp table data Other sessions can simultaneously execute the same SELECT * FROM view_over_* and get their own results. The goal is to avoid having to CREATE TEMP TABLE within the session but instead be able to do: CREATE GLOBAL TEMP TABLE my_instance_of_template_table LIKE template_table; And have the CREATE VIEW not fail and the session behavior as described. David J.