temp.out
来自「postgresql8.3.4源码,开源数据库」· OUT 代码 · 共 198 行
OUT
198 行
---- TEMP-- Test temp relations and indexes---- test temp table/index maskingCREATE 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; tcol ------(0 rows)DROP INDEX i_temptest;DROP TABLE temptest;SELECT * FROM temptest; col -----(0 rows)DROP INDEX i_temptest;DROP TABLE temptest;-- test temp table selectsCREATE TABLE temptest(col int);INSERT INTO temptest VALUES (1);CREATE TEMP TABLE temptest(tcol float);INSERT INTO temptest VALUES (2.1);SELECT * FROM temptest; tcol ------ 2.1(1 row)DROP TABLE temptest;SELECT * FROM temptest; col ----- 1(1 row)DROP TABLE temptest;-- test temp table deletionCREATE TEMP TABLE temptest(col int);\c regressionSELECT * FROM temptest;ERROR: relation "temptest" does not exist-- Test ON COMMIT DELETE ROWSCREATE TEMP TABLE temptest(col int) ON COMMIT DELETE ROWS;BEGIN;INSERT INTO temptest VALUES (1);INSERT INTO temptest VALUES (2);SELECT * FROM temptest; col ----- 1 2(2 rows)COMMIT;SELECT * FROM temptest; col -----(0 rows)DROP TABLE temptest;BEGIN;CREATE TEMP TABLE temptest(col) ON COMMIT DELETE ROWS AS SELECT 1;SELECT * FROM temptest; col ----- 1(1 row)COMMIT;SELECT * FROM temptest; col -----(0 rows)DROP TABLE temptest;-- Test ON COMMIT DROPBEGIN;CREATE TEMP TABLE temptest(col int) ON COMMIT DROP;INSERT INTO temptest VALUES (1);INSERT INTO temptest VALUES (2);SELECT * FROM temptest; col ----- 1 2(2 rows)COMMIT;SELECT * FROM temptest;ERROR: relation "temptest" does not existBEGIN;CREATE TEMP TABLE temptest(col) ON COMMIT DROP AS SELECT 1;SELECT * FROM temptest; col ----- 1(1 row)COMMIT;SELECT * FROM temptest;ERROR: relation "temptest" does not exist-- ON COMMIT is only allowed for TEMPCREATE TABLE temptest(col int) ON COMMIT DELETE ROWS;ERROR: ON COMMIT can only be used on temporary tablesCREATE TABLE temptest(col) ON COMMIT DELETE ROWS AS SELECT 1;ERROR: ON COMMIT can only be used on temporary tables-- Test foreign keysBEGIN;CREATE TEMP TABLE temptest1(col int PRIMARY KEY);NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "temptest1_pkey" for table "temptest1"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; col ----- 1(1 row)SELECT * FROM temptest2; col -----(0 rows)BEGIN;CREATE TEMP TABLE temptest3(col int PRIMARY KEY) ON COMMIT DELETE ROWS;NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "temptest3_pkey" for table "temptest3"CREATE TEMP TABLE temptest4(col int REFERENCES temptest3);COMMIT;ERROR: unsupported ON COMMIT and foreign key combinationDETAIL: Table "temptest4" references "temptest3", but they do not have the same ON COMMIT setting.-- Test manipulation of temp schema's placement in search pathcreate 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 tablesselect * from whereami; f1 ------ temp(1 row)select whoami(); whoami -------- public(1 row)-- can list temp first explicitly, but it still doesn't affect functionsset search_path = pg_temp, public;select * from whereami; f1 ------ temp(1 row)select whoami(); whoami -------- public(1 row)-- or put it last for securityset search_path = public, pg_temp;select * from whereami; f1 -------- public(1 row)select whoami(); whoami -------- public(1 row)-- you can invoke a temp function explicitly, thoughselect pg_temp.whoami(); whoami -------- temp(1 row)drop table public.whereami;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?