Re: Global temporary tables surprise

From: Devrim GUNDUZ <devrim(at)gunduz(dot)org>
To: "mladen(dot)gogala(at)vmsinfo(dot)com" <mladen(dot)gogala(at)vmsinfo(dot)com>
Cc: "pgsql-novice(at)postgresql(dot)org" <pgsql-novice(at)postgresql(dot)org>
Subject: Re: Global temporary tables surprise
Date: 2010-06-13 09:24:15
Message-ID: BE5818E7-E997-4DAD-B97D-087C16F4528B@gunduz.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

"global" keyword has no effect in PostgreSQL. See the compatibility
section in the doc that you linked.
--
Devrim GÜNDÜZ
PostgreSQL DBA @ Akinon/Markafoni, Red Hat Certified Engineer
devrim~gunduz.org, devrim~PostgreSQL.org, devrim.gunduz~linux.org.tr
http://www.gunduz.org Twitter: http://twitter.com/devrimgunduz

13.Haz.2010 tarihinde 11:54 saatinde, Mladen Gogala <mladen(dot)gogala(at)vmsinfo(dot)com
> şunları yazdı:

> I created a global temporary table, using the following syntax:
>
> [mgogala(at)medo tmp]$ psql scott
> Timing is on.
> psql (8.4.4)
> Type "help" for help.
>
> scott=# create global temporary table t_emp
> scott-# on commit preserve rows
> scott-# as select * from emp;
> SELECT
> Time: 127.086 ms
> scott=# commit;
> WARNING: there is no transaction in progress
> COMMIT
> Time: 0.353 ms
> scott=# select * from t_emp;
> empno | ename | job | mgr | hiredate | sal |
> comm | deptno
> -------+--------+-----------+------+---------------------+------
> +------+--------
> 7369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800 |
> | 20
> 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 00:00:00 | 1600 | 300
> | 30
> 7521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250 | 500
> | 30
> 7566 | JONES | MANAGER | 7839 | 1981-04-02 00:00:00 | 2975 |
> | 20
> 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250 | 1400
> | 30
> 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 00:00:00 | 2850 |
> | 30
> 7782 | CLARK | MANAGER | 7839 | 1981-06-09 00:00:00 | 2450 |
> | 10
> 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 00:00:00 | 3000 |
> | 20
> 7839 | KING | PRESIDENT | | 1981-11-17 00:00:00 | 5000 |
> | 10
> 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500 | 0
> | 30
> 7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100 |
> | 20
> 7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 | 950 |
> | 30
> 7902 | FORD | ANALYST | 7566 | 1981-12-03 00:00:00 | 3000 |
> | 20
> 7934 | MILLER | CLERK | 7782 | 1982-01-23 00:00:00 | 1300 |
> | 10
> (14 rows)
>
> Time: 0.595 ms
> scott=# \q
>
> So far, everything is kosher and expected. Now, I re-entered the psql
> and got the surprise of my life:
>
> [mgogala(at)medo tmp]$ psql scott
> Timing is on.
> psql (8.4.4)
> Type "help" for help.
>
> scott=# select * from t_emp;
> ERROR: relation "t_emp" does not exist
> LINE 1: select * from t_emp;
> ^
> scott=#
>
>
> Whaddaf...? I did the wrong thing, namely went to the documentation
> and, sure enough, there it was:
> http://www.postgresql.org/docs/8.4/static/sql-createtable.html
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> **********************************************************************
> Parameters
>
> TEMPORARY or TEMP
>
> If specified, the table is created as a temporary table. Temporary
> tables are automatically dropped at the end of a session, or
> optionally at the end of the current transaction (see ON COMMIT
> below). Existing permanent tables with the same name are not visible
> to the current session while the temporary table exists, unless they
> are referenced with schema-qualified names. Any indexes created on a
> temporary table are automatically temporary as well.
>
> Optionally, GLOBAL or LOCAL can be written before TEMPORARY or
> TEMP. This makes no difference in PostgreSQL, but see Compatibility.
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> ***
> **********************************************************************
>
> So, Postgresql will simply ignore "GLOBAL" or "LOCAL" and will
> create a local temporary table anyway? Why is that? Don't get me
> wrong, local temporary tables are a great replacement for cursors,
> but global temporary tables have their uses too. Is there any hope
> that we will have global temporary tables in the foreseeable
> future? Another popular variety of databases supports global
> temporary tables but not local temporary tables. It would be very
> nice to have a standard terminology, wouldn't it?
>
>
> --
> Mladen Gogala Sr. Oracle DBA
> 1500 Broadway
> New York, NY 10036
> (212) 329-5251
> www.vmsinfo.com
>
> --
> Sent via pgsql-novice mailing list (pgsql-novice(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-novice

In response to

Browse pgsql-novice by date

  From Date Subject
Next Message John Gage 2010-06-13 10:06:58 Searching the documentation by typing the search term in the browser
Previous Message Mladen Gogala 2010-06-13 08:54:22 Global temporary tables surprise