github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/logictest/testdata/logic_test/temp_table (about) 1 # LogicTest: !3node-tenant 2 statement error temporary tables are only supported experimentally\nHINT:.*46260\n.*\n.*SET experimental_enable_temp_tables = 'on' 3 CREATE TEMP TABLE a_temp(a INT PRIMARY KEY) 4 5 statement ok 6 SET experimental_enable_temp_tables=true 7 8 subtest show_tables 9 10 statement ok 11 CREATE TEMP TABLE tbl (a int) 12 13 query TT rowsort 14 SELECT table_name, type FROM [SHOW TABLES] 15 ---- 16 tbl table 17 18 statement ok 19 DROP TABLE tbl 20 21 subtest test_meta_tables 22 23 statement ok 24 CREATE TEMP TABLE temp_table_test (a timetz PRIMARY KEY) ON COMMIT PRESERVE ROWS 25 26 statement ok 27 CREATE TEMP TABLE temp_table_ref (a timetz PRIMARY KEY) 28 29 statement ok 30 ALTER TABLE temp_table_ref ADD CONSTRAINT fk_temp FOREIGN KEY (a) REFERENCES temp_table_test(a) 31 32 query TT 33 SHOW CREATE TABLE temp_table_test 34 ---- 35 temp_table_test CREATE TEMP TABLE temp_table_test ( 36 a TIMETZ NOT NULL, 37 CONSTRAINT "primary" PRIMARY KEY (a ASC), 38 FAMILY "primary" (a) 39 ) 40 41 query TT 42 SELECT table_name, table_type FROM information_schema.tables WHERE table_name = 'temp_table_test' AND table_schema LIKE 'pg_temp_%' 43 ---- 44 temp_table_test LOCAL TEMPORARY 45 46 # query changes names, so we can only grab a count to be sure. 47 query I 48 SELECT count(1) FROM pg_namespace WHERE nspname LIKE 'pg_temp_%' 49 ---- 50 1 51 52 query T rowsort 53 SELECT table_name FROM [SHOW TABLES FROM pg_temp] 54 ---- 55 temp_table_test 56 temp_table_ref 57 58 statement ok 59 DROP TABLE temp_table_ref CASCADE; DROP TABLE temp_table_test CASCADE 60 61 # Tests foreign key errors with tables resolve to the correct name. 62 subtest foreign_key_errors 63 64 statement ok 65 CREATE TEMP TABLE a (a int) 66 67 statement error cannot add a SET NULL cascading action on column "test\.pg_temp.*\.b\.c" which has a NOT NULL constraint 68 CREATE TEMP TABLE b (c int NOT NULL PRIMARY KEY, FOREIGN KEY (c) REFERENCES a ON UPDATE SET NULL) 69 70 statement error cannot add a SET DEFAULT cascading action on column "test\.pg_temp_.*\.b\.c" which has a NOT NULL constraint and a NULL default expression 71 CREATE TEMP TABLE b (c int DEFAULT NULL PRIMARY KEY, FOREIGN KEY (c) REFERENCES a ON UPDATE SET DEFAULT) 72 73 statement ok 74 DROP TABLE a 75 76 # Test uncommitted temp tables do not clash with existing tables 77 subtest test_uncommitted_tables 78 79 statement ok 80 BEGIN; 81 CREATE TABLE table_a (a int); CREATE TEMP TABLE table_a (a int); 82 INSERT INTO table_a VALUES (1); INSERT INTO pg_temp.table_a VALUES (2); INSERT INTO public.table_a VALUES (3); 83 COMMIT 84 85 query I 86 SELECT * FROM pg_temp.table_a ORDER BY a 87 ---- 88 1 89 2 90 91 query I 92 SELECT * FROM public.table_a ORDER BY a 93 ---- 94 3 95 96 statement ok 97 DROP TABLE pg_temp.table_a; DROP TABLE public.table_a 98 99 # Test operations on a database with temp tables inside them. 100 subtest test_database_operations 101 102 statement ok 103 CREATE DATABASE bob; USE bob; CREATE TEMP TABLE a(a int); USE defaultdb 104 105 statement ok 106 SET sql_safe_updates = true 107 108 statement error DROP DATABASE on non-empty database without explicit CASCADE 109 DROP DATABASE bob 110 111 statement ok 112 CREATE TEMP VIEW a_view AS SELECT a FROM bob.pg_temp.a 113 114 statement error cannot rename database because relation "defaultdb.pg_temp_.*.a_view" depends on relation "bob.pg_temp_.*.a" 115 ALTER DATABASE bob RENAME TO alice 116 117 statement ok 118 DROP VIEW a_view; ALTER DATABASE bob RENAME TO alice 119 120 statement ok 121 DROP DATABASE alice CASCADE 122 123 # Test for temporary views. 124 subtest temporary_views 125 126 statement ok 127 CREATE TABLE permanent_table(a int); CREATE TEMP TABLE temp_table(a int) 128 129 statement ok 130 INSERT INTO permanent_table VALUES (1); INSERT INTO temp_table VALUES (2) 131 132 statement ok 133 CREATE TEMP VIEW view_on_permanent AS SELECT a FROM permanent_table 134 135 query I 136 SELECT * from pg_temp.view_on_permanent 137 ---- 138 1 139 140 statement ok 141 CREATE TEMP VIEW view_on_temp AS SELECT a FROM temp_table 142 143 query I 144 SELECT * from pg_temp.view_on_temp 145 ---- 146 2 147 148 # A "permanent" view on a temporary table gets upgraded to temporary. 149 query T noticetrace 150 CREATE VIEW upgrade_temp_view AS SELECT a FROM temp_table 151 ---- 152 NOTICE: view "upgrade_temp_view" will be a temporary view 153 154 query I 155 SELECT * from pg_temp.upgrade_temp_view 156 ---- 157 2 158 159 statement ok 160 DROP VIEW view_on_temp; DROP VIEW view_on_permanent; DROP VIEW upgrade_temp_view 161 162 statement ok 163 DROP TABLE permanent_table; DROP TABLE temp_table 164 165 # Tests for temporary sequences working as expected. 166 subtest temp_sequences 167 168 statement ok 169 CREATE TEMP SEQUENCE temp_seq; CREATE TABLE a (a int DEFAULT nextval('temp_seq')) 170 171 statement ok 172 INSERT INTO a VALUES (default), (default), (100) 173 174 query I 175 SELECT * FROM a ORDER BY a 176 ---- 177 1 178 2 179 100 180 181 # Permanent tables can reference temporary schemas. 182 statement ok 183 CREATE TABLE perm_table(a int DEFAULT nextval('pg_temp.temp_seq')) 184 185 statement ok 186 INSERT INTO perm_table VALUES (default), (default), (101) 187 188 query I 189 SELECT * FROM perm_table ORDER BY a 190 ---- 191 3 192 4 193 101 194 195 statement ok 196 ALTER TABLE a ALTER COLUMN a DROP DEFAULT 197 198 statement error cannot drop sequence temp_seq because other objects depend on it 199 DROP SEQUENCE pg_temp.temp_seq 200 201 # Allow temporary tables to use serial for temporary schemas. 202 statement ok 203 SET serial_normalization='sql_sequence' 204 205 statement ok 206 CREATE TEMP TABLE ref_temp_table (a SERIAL) 207 208 query I 209 SELECT nextval('pg_temp.ref_temp_table_a_seq') 210 ---- 211 1 212 213 statement ok 214 DROP TABLE perm_table; DROP TABLE ref_temp_table 215 216 statement ok 217 DROP SEQUENCE pg_temp.temp_seq; DROP SEQUENCE pg_temp.ref_temp_table_a_seq; DROP TABLE a 218 219 statement ok 220 SET serial_normalization='rowid' 221 222 subtest table_with_on_commit 223 224 statement error ON COMMIT can only be used on temporary tables 225 CREATE TABLE a (a int) ON COMMIT PRESERVE ROWS 226 227 subtest regression_47030 228 229 statement ok 230 CREATE TEMP TABLE regression_47030(c0 INT); INSERT INTO regression_47030 VALUES (1); 231 232 query I 233 SELECT * FROM regression_47030 234 ---- 235 1 236 237 statement ok 238 TRUNCATE regression_47030; INSERT INTO regression_47030 VALUES (2) 239 240 query I 241 SELECT * FROM regression_47030 242 ---- 243 2