mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-13 20:29:46 +02:00
85c0eac1af
required by the SQL standard, and TABLESPACE is useful functionality. Patch from Kris Jurka, minor editorialization by Neil Conway.
140 lines
2.9 KiB
Plaintext
140 lines
2.9 KiB
Plaintext
--
|
|
-- 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;
|
|
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 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;
|
|
tcol
|
|
------
|
|
2.1
|
|
(1 row)
|
|
|
|
DROP TABLE temptest;
|
|
SELECT * FROM temptest;
|
|
col
|
|
-----
|
|
1
|
|
(1 row)
|
|
|
|
DROP TABLE temptest;
|
|
-- test temp table deletion
|
|
CREATE TEMP TABLE temptest(col int);
|
|
\c regression
|
|
SELECT * FROM temptest;
|
|
ERROR: relation "temptest" does not exist
|
|
-- 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;
|
|
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 DROP
|
|
BEGIN;
|
|
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 exist
|
|
BEGIN;
|
|
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 TEMP
|
|
CREATE TABLE temptest(col int) ON COMMIT DELETE ROWS;
|
|
ERROR: ON COMMIT can only be used on temporary tables
|
|
CREATE TABLE temptest(col) ON COMMIT DELETE ROWS AS SELECT 1;
|
|
ERROR: ON COMMIT can only be used on temporary tables
|
|
-- Test foreign keys
|
|
BEGIN;
|
|
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 combination
|
|
DETAIL: Table "temptest4" references "temptest3" via foreign key constraint "temptest4_col_fkey", but they do not have the same ON COMMIT setting.
|