| -- |
| -- TEMP |
| -- Test temp relations and indexes |
| -- |
| |
| -- test temp table/index masking |
| |
| CREATE TABLE temptest(col int); |
| |
| -- CREATE INDEX i_temptest ON temptest(col); |
| |
| CREATE TEMP TABLE temptest(tcol int); |
| |
| -- CREATE INDEX i_temptest ON temptest(tcol); |
| |
| SELECT * FROM temptest; |
| |
| -- DROP INDEX i_temptest; |
| |
| DROP TABLE temptest; |
| |
| SELECT * FROM temptest; |
| |
| -- DROP INDEX i_temptest; |
| |
| DROP TABLE temptest; |
| |
| -- test temp table selects |
| |
| CREATE TABLE temptest(col int); |
| |
| INSERT INTO temptest VALUES (1); |
| |
| CREATE TEMP TABLE temptest(tcol float); |
| |
| INSERT INTO temptest VALUES (2.1); |
| |
| SELECT * FROM temptest; |
| |
| DROP TABLE temptest; |
| |
| SELECT * FROM temptest; |
| |
| DROP TABLE temptest; |
| |
| -- test temp table deletion |
| |
| CREATE TEMP TABLE temptest(col int); |
| |
| \c db_testtemp_basictest |
| |
| SELECT * FROM temptest; |
| |
| -- Test ON COMMIT DELETE ROWS |
| |
| CREATE TEMP TABLE temptest(col int) ON COMMIT DELETE ROWS; |
| |
| BEGIN; |
| INSERT INTO temptest VALUES (1); |
| INSERT INTO temptest VALUES (2); |
| |
| SELECT * FROM temptest; |
| COMMIT; |
| |
| SELECT * FROM temptest; |
| |
| DROP TABLE temptest; |
| |
| BEGIN; |
| CREATE TEMP TABLE temptest(col) ON COMMIT DELETE ROWS AS SELECT 1; |
| |
| SELECT * FROM temptest; |
| COMMIT; |
| |
| SELECT * FROM temptest; |
| |
| DROP TABLE temptest; |
| |
| -- Test ON COMMIT DROP |
| |
| BEGIN; |
| |
| CREATE TEMP TABLE temptest(col int) ON COMMIT DROP; |
| |
| INSERT INTO temptest VALUES (1); |
| INSERT INTO temptest VALUES (2); |
| |
| SELECT * FROM temptest; |
| COMMIT; |
| |
| SELECT * FROM temptest; |
| |
| BEGIN; |
| CREATE TEMP TABLE temptest(col) ON COMMIT DROP AS SELECT 1; |
| |
| SELECT * FROM temptest; |
| COMMIT; |
| |
| SELECT * FROM temptest; |
| |
| -- ON COMMIT is only allowed for TEMP |
| |
| CREATE TABLE temptest(col int) ON COMMIT DELETE ROWS; |
| CREATE TABLE temptest(col) ON COMMIT DELETE ROWS AS SELECT 1; |
| |
| -- Test foreign keys |
| -- BEGIN; |
| -- CREATE TEMP TABLE temptest1(col int PRIMARY KEY) DISTRIBUTED BY (col); |
| -- CREATE TEMP TABLE temptest2(col int REFERENCES temptest1) |
| -- ON COMMIT DELETE ROWS; |
| -- INSERT INTO temptest1 VALUES (1); |
| -- INSERT INTO temptest2 VALUES (1); |
| -- COMMIT; |
| -- SELECT * FROM temptest1; |
| -- SELECT * FROM temptest2; |
| |
| -- BEGIN; |
| -- CREATE TEMP TABLE temptest3(col int PRIMARY KEY) ON COMMIT DELETE ROWS DISTRIBUTED BY (col); |
| -- CREATE TEMP TABLE temptest4(col int REFERENCES temptest3); |
| -- COMMIT; |
| |
| -- Test manipulation of temp schema's placement in search path |
| |
| create table public.whereami (f1 text); |
| insert into public.whereami values ('public'); |
| |
| create temp table whereami (f1 text); |
| insert into whereami values ('temp'); |
| |
| -- create function public.whoami() returns text |
| -- as $$select 'public'::text$$ language sql; |
| |
| -- create function pg_temp.whoami() returns text |
| -- as $$select 'temp'::text$$ language sql; |
| |
| -- default should have pg_temp implicitly first, but only for tables |
| select * from whereami; |
| -- select whoami(); |
| |
| -- can list temp first explicitly, but it still doesn't affect functions |
| set search_path = pg_temp, public; |
| select * from whereami; |
| -- select whoami(); |
| |
| -- or put it last for security |
| set search_path = public, pg_temp; |
| select * from whereami; |
| -- select whoami(); |
| |
| -- you can invoke a temp function explicitly, though |
| -- select pg_temp.whoami(); |
| |
| drop table public.whereami; |
| |
| -- Test querying column using pg_temp schema |
| create table pg_temp.test (row integer, count integer); |
| insert into pg_temp.test values (1, 10), (2, 20), (3, 30); |
| select avg(pg_temp.test.count) from pg_temp.test; |
| select avg(test.count) from pg_temp.test; |
| select avg(count) from pg_temp.test; |
| |
| select case when pg_temp.test.count = 30 then 30 when pg_temp.test.count = 20 then 20 else 10 end from pg_temp.test; |
| |