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