rename.slt 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. mode standard
  10. # Start from a pristine server
  11. reset-server
  12. statement ok
  13. CREATE SCHEMA a1
  14. statement ok
  15. CREATE SCHEMA b1
  16. statement error db error: ERROR: schema 'b1' already exists
  17. CREATE SCHEMA B1
  18. query TT
  19. SELECT database_id, name FROM mz_schemas WHERE id LIKE 'u%';
  20. ----
  21. u1
  22. a1
  23. u1
  24. b1
  25. u1
  26. public
  27. statement ok
  28. CREATE TABLE b1.t (x int)
  29. query TT
  30. SHOW CREATE TABLE b1.t
  31. ----
  32. materialize.b1.t
  33. CREATE TABLE materialize.b1.t (x pg_catalog.int4);
  34. statement ok
  35. INSERT INTO b1.t VALUES (1), (2), (3)
  36. query I valuesort
  37. SELECT x FROM b1.t
  38. ----
  39. 1
  40. 2
  41. 3
  42. statement error db error: ERROR: schema 'a1' already exists
  43. ALTER SCHEMA b1 RENAME TO a1
  44. statement error db error: ERROR: unacceptable schema name 'mz_special'
  45. ALTER SCHEMA b1 RENAME TO mz_special
  46. statement ok
  47. ALTER SCHEMA b1 RENAME TO b2
  48. query TTT
  49. SELECT event_type, object_type, details FROM mz_audit_events WHERE event_type = 'alter' AND object_type = 'schema';
  50. ----
  51. alter
  52. schema
  53. {"database_name":"materialize","id":"u10","new_name":"b2","old_name":"b1"}
  54. query I valuesort
  55. SELECT x FROM b2.t
  56. ----
  57. 1
  58. 2
  59. 3
  60. mode cockroach
  61. query TT rowsort
  62. SELECT database_id, name FROM mz_schemas WHERE id LIKE 'u%';
  63. ----
  64. u1 a1
  65. u1 b2
  66. u1 public
  67. mode standard
  68. query TT
  69. SHOW CREATE TABLE b2.t;
  70. ----
  71. materialize.b2.t
  72. CREATE TABLE materialize.b2.t (x pg_catalog.int4);
  73. statement ok
  74. CREATE SCHEMA friend;
  75. statement ok
  76. CREATE VIEW friend.v1 AS SELECT x FROM b2.t;
  77. query I valuesort
  78. SELECT * FROM friend.v1;
  79. ----
  80. 1
  81. 2
  82. 3
  83. query TT
  84. SHOW CREATE VIEW friend.v1;
  85. ----
  86. materialize.friend.v1
  87. CREATE VIEW materialize.friend.v1 AS SELECT x FROM materialize.b2.t;
  88. statement ok
  89. ALTER SCHEMA b2 RENAME TO b3;
  90. query I valuesort
  91. SELECT * FROM friend.v1;
  92. ----
  93. 1
  94. 2
  95. 3
  96. query TT
  97. SHOW CREATE VIEW friend.v1;
  98. ----
  99. materialize.friend.v1
  100. CREATE VIEW materialize.friend.v1 AS SELECT x FROM materialize.b3.t;
  101. statement ok
  102. CREATE SCHEMA grand_friend;
  103. statement ok
  104. CREATE MATERIALIZED VIEW grand_friend.mv1 AS SELECT x FROM friend.v1;
  105. query I valuesort
  106. SELECT x FROM grand_friend.mv1;
  107. ----
  108. 1
  109. 2
  110. 3
  111. statement ok
  112. ALTER SCHEMA friend RENAME TO enemy;
  113. statement error db error: ERROR: unknown schema 'friend'
  114. SELECT * FROM friend.v1;
  115. query TT
  116. SHOW CREATE TABLE b3.t;
  117. ----
  118. materialize.b3.t
  119. CREATE TABLE materialize.b3.t (x pg_catalog.int4);
  120. query TT
  121. SHOW CREATE VIEW enemy.v1;
  122. ----
  123. materialize.enemy.v1
  124. CREATE VIEW materialize.enemy.v1 AS SELECT x FROM materialize.b3.t;
  125. query TT
  126. SHOW CREATE MATERIALIZED VIEW grand_friend.mv1;
  127. ----
  128. materialize.grand_friend.mv1
  129. CREATE MATERIALIZED VIEW materialize.grand_friend.mv1⏎ IN CLUSTER quickstart⏎ WITH (REFRESH = ON COMMIT)⏎ AS SELECT x FROM materialize.enemy.v1;
  130. statement ok
  131. CREATE TABLE a1.t (y text);
  132. statement ok
  133. INSERT INTO a1.t VALUES ('foo'), ('bar');
  134. query TT
  135. SHOW CREATE TABLE a1.t;
  136. ----
  137. materialize.a1.t
  138. CREATE TABLE materialize.a1.t (y pg_catalog.text);
  139. statement ok
  140. CREATE VIEW enemy.v2 AS (SELECT * FROM a1.t, b3.t);
  141. query TI
  142. SELECT * FROM enemy.v2;
  143. ----
  144. bar
  145. 1
  146. bar
  147. 2
  148. bar
  149. 3
  150. foo
  151. 1
  152. foo
  153. 2
  154. foo
  155. 3
  156. query TT
  157. SHOW CREATE VIEW enemy.v2;
  158. ----
  159. materialize.enemy.v2
  160. CREATE VIEW materialize.enemy.v2 AS SELECT * FROM materialize.a1.t, materialize.b3.t;
  161. statement ok
  162. CREATE INDEX enemy_v2_idx ON enemy.v2 (y, x);
  163. query T
  164. SELECT name FROM mz_indexes WHERE name LIKE 'enemy%';
  165. ----
  166. enemy_v2_idx
  167. query TT
  168. SHOW CREATE INDEX enemy.enemy_v2_idx
  169. ----
  170. materialize.enemy.enemy_v2_idx
  171. CREATE INDEX enemy_v2_idx IN CLUSTER quickstart ON materialize.enemy.v2 (y, x);
  172. statement ok
  173. ALTER SCHEMA b3 RENAME TO b4;
  174. query TT
  175. SHOW CREATE VIEW enemy.v2;
  176. ----
  177. materialize.enemy.v2
  178. CREATE VIEW materialize.enemy.v2 AS SELECT * FROM materialize.a1.t, materialize.b4.t;
  179. statement ok
  180. ALTER SCHEMA enemy RENAME TO friend_again;
  181. query TT
  182. SHOW CREATE VIEW friend_again.v2;
  183. ----
  184. materialize.friend_again.v2
  185. CREATE VIEW materialize.friend_again.v2 AS SELECT * FROM materialize.a1.t, materialize.b4.t;
  186. query TT
  187. SHOW CREATE INDEX friend_again.enemy_v2_idx
  188. ----
  189. materialize.friend_again.enemy_v2_idx
  190. CREATE INDEX enemy_v2_idx IN CLUSTER quickstart ON materialize.friend_again.v2 (y, x);
  191. statement ok
  192. CREATE TABLE grand_friend.t1 (keys text);
  193. statement ok
  194. INSERT INTO grand_friend.t1 VALUES ('foo'), ('baz');
  195. statement ok
  196. CREATE SCHEMA c1;
  197. query TT valuesort
  198. SELECT database_id, name FROM mz_schemas WHERE id LIKE 'u%';
  199. ----
  200. u1
  201. a1
  202. u1
  203. b4
  204. u1
  205. c1
  206. u1
  207. public
  208. u1
  209. friend_again
  210. u1
  211. grand_friend
  212. statement ok
  213. CREATE VIEW c1.keys (aux_key) AS VALUES ('apple'), ('orange'), ('banana');
  214. statement ok
  215. CREATE VIEW c1.v1 AS (SELECT y FROM friend_again.v2 JOIN grand_friend.t1 ON materialize.friend_again.v2.y = materialize.grand_friend.t1.keys UNION ALL SELECT aux_key FROM c1.keys, b4.t);
  216. query T valuesort
  217. SELECT * FROM c1.v1;
  218. ----
  219. foo
  220. foo
  221. foo
  222. apple
  223. apple
  224. apple
  225. banana
  226. banana
  227. banana
  228. orange
  229. orange
  230. orange
  231. query TT
  232. SHOW CREATE VIEW c1.v1;
  233. ----
  234. materialize.c1.v1
  235. CREATE VIEW⏎ materialize.c1.v1⏎ AS⏎ SELECT y⏎ FROM⏎ materialize.friend_again.v2⏎ JOIN⏎ materialize.grand_friend.t1⏎ ON materialize.friend_again.v2.y = materialize.grand_friend.t1.keys⏎ UNION ALL SELECT aux_key FROM materialize.c1.keys, materialize.b4.t;
  236. statement ok
  237. ALTER SCHEMA c1 RENAME TO c2;
  238. statement ok
  239. ALTER SCHEMA grand_friend RENAME TO grand_acquaintance;
  240. query TT
  241. SHOW CREATE VIEW c2.v1;
  242. ----
  243. materialize.c2.v1
  244. CREATE VIEW⏎ materialize.c2.v1⏎ AS⏎ SELECT y⏎ FROM⏎ materialize.friend_again.v2⏎ JOIN⏎ materialize.grand_acquaintance.t1⏎ ON materialize.friend_again.v2.y = materialize.grand_acquaintance.t1.keys⏎ UNION ALL SELECT aux_key FROM materialize.c2.keys, materialize.b4.t;
  245. statement ok
  246. CREATE TABLE c2.c2 (ts int);
  247. query TT
  248. SHOW CREATE TABLE c2.c2;
  249. ----
  250. materialize.c2.c2
  251. CREATE TABLE materialize.c2.c2 (ts pg_catalog.int4);
  252. statement ok
  253. ALTER SCHEMA c2 RENAME TO c3;
  254. query TT
  255. SHOW CREATE TABLE c3.c2;
  256. ----
  257. materialize.c3.c2
  258. CREATE TABLE materialize.c3.c2 (ts pg_catalog.int4);
  259. # Renaming system owned schemas is not allowed.
  260. statement error db error: ERROR: must be owner of SCHEMA materialize.public
  261. ALTER SCHEMA public RENAME TO public_other;
  262. statement error db error: ERROR: renaming the mz_catalog schema is not supported
  263. ALTER SCHEMA mz_catalog RENAME TO mz_catalog_other;
  264. statement error db error: ERROR: renaming the mz_internal schema is not supported
  265. ALTER SCHEMA mz_internal RENAME TO mz_internal_other;
  266. statement error db error: ERROR: renaming the information_schema schema is not supported
  267. ALTER SCHEMA information_schema RENAME TO information_schema_other;
  268. # Fully qualified columns names are renamed.
  269. statement ok
  270. CREATE SCHEMA d;
  271. statement ok
  272. CREATE VIEW d.values (x, y, z) AS VALUES (1, 'foo', 100), (2, 'bar', 200), (3, 'baz', 300);
  273. statement ok
  274. CREATE VIEW d.qualified_columns AS ( SELECT materialize.d.values.x, materialize.d.values.y, z FROM d.values );
  275. query TT
  276. SHOW CREATE VIEW d.qualified_columns;
  277. ----
  278. materialize.d.qualified_columns
  279. CREATE VIEW⏎ materialize.d.qualified_columns⏎ AS SELECT materialize.d.values.x, materialize.d.values.y, z FROM materialize.d.values;
  280. mode cockroach
  281. query ITI rowsort
  282. SELECT * FROM d.qualified_columns;
  283. ----
  284. 1 foo 100
  285. 2 bar 200
  286. 3 baz 300
  287. mode standard
  288. statement ok
  289. ALTER SCHEMA d RENAME TO d_renamed;
  290. query TT
  291. SHOW CREATE VIEW d_renamed.qualified_columns;
  292. ----
  293. materialize.d_renamed.qualified_columns
  294. CREATE VIEW⏎ materialize.d_renamed.qualified_columns⏎ AS⏎ SELECT materialize.d_renamed.values.x, materialize.d_renamed.values.y, z⏎ FROM materialize.d_renamed.values;
  295. query ITI
  296. SELECT * FROM d_renamed.qualified_columns LIMIT 1;
  297. ----
  298. 1
  299. foo
  300. 100
  301. # Renaming and capitalization.
  302. statement ok
  303. CREATE SCHEMA "case";
  304. statement ok
  305. CREATE VIEW "case".case AS VALUES (1);
  306. statement ok
  307. CREATE VIEW d_renamed.case (case) AS ( SELECT * FROM "case".case );
  308. query TT
  309. SHOW CREATE VIEW d_renamed."case";
  310. ----
  311. materialize.d_renamed.case
  312. CREATE VIEW materialize.d_renamed.case (case) AS SELECT * FROM materialize.case.case;
  313. statement ok
  314. CREATE SCHEMA "CASE";
  315. statement ok
  316. CREATE VIEW "CASE".case AS VALUES (3);
  317. statement ok
  318. ALTER SCHEMA "case" RENAME TO "cAsE";
  319. query I
  320. SELECT * FROM "CASE".case;
  321. ----
  322. 3
  323. query I
  324. SELECT * FROM "cAsE".case;
  325. ----
  326. 1
  327. query TT
  328. SHOW CREATE VIEW "cAsE".case;
  329. ----
  330. materialize.cAsE.case
  331. CREATE VIEW materialize."cAsE".case AS VALUES (1);
  332. query TT
  333. SHOW CREATE VIEW d_renamed.case;
  334. ----
  335. materialize.d_renamed.case
  336. CREATE VIEW materialize.d_renamed.case (case) AS SELECT * FROM materialize."cAsE".case;
  337. statement ok
  338. CREATE SCHEMA j;
  339. statement ok
  340. CREATE VIEW j.l AS VALUES (202);
  341. statement ok
  342. CREATE DATABASE j;
  343. statement ok
  344. CREATE SCHEMA j.k;
  345. statement ok
  346. CREATE VIEW j.k.l AS VALUES (101);
  347. query TT
  348. SHOW CREATE VIEW j.k.l;
  349. ----
  350. j.k.l
  351. CREATE VIEW j.k.l AS VALUES (101);
  352. query I
  353. SELECT * FROM j.k.l;
  354. ----
  355. 101
  356. statement ok
  357. ALTER SCHEMA j RENAME TO j_other;
  358. query TT
  359. SHOW CREATE VIEW j.k.l;
  360. ----
  361. j.k.l
  362. CREATE VIEW j.k.l AS VALUES (101);
  363. query I
  364. SELECT * FROM j.k.l;
  365. ----
  366. 101
  367. query I
  368. SELECT * FROM j_other.l;
  369. ----
  370. 202
  371. # Temporary schemas.
  372. statement error db error: ERROR: cannot rename schemas in the ambient database: "mz_temp"
  373. ALTER SCHEMA mz_temp RENAME TO other_name;
  374. simple conn=mz_system,user=mz_system
  375. ALTER SCHEMA mz_temp RENAME TO other_name;
  376. ----
  377. db error: ERROR: cannot rename schemas in the ambient database: "mz_temp"
  378. # Schemas that do not exist.
  379. statement error unknown schema 'does_not_exist'
  380. ALTER SCHEMA does_not_exist RENAME TO other_does_not_exist;
  381. # The mz_system user should be able to rename the public schema.
  382. statement ok
  383. CREATE TABLE t1 (bar int);
  384. statement ok
  385. INSERT INTO t1 VALUES (100), (200), (300);
  386. simple conn=mz_system,user=mz_system
  387. ALTER SCHEMA public RENAME TO public_renamed;
  388. ----
  389. COMPLETE 0
  390. # Search path is still set to "public" which no longer exists.
  391. #
  392. # Note: this follows Postgres behavior.
  393. statement error db error: ERROR: unknown catalog item 't1'
  394. SELECT bar FROM t1;
  395. query T
  396. SHOW search_path;
  397. ----
  398. public
  399. statement ok
  400. SET SCHEMA TO public_renamed;
  401. query I
  402. SELECT bar FROM t1 ORDER BY bar ASC;
  403. ----
  404. 100
  405. 200
  406. 300
  407. # Renaming schemas across databases.
  408. statement ok
  409. CREATE DATABASE a;
  410. statement ok
  411. CREATE SCHEMA a.foo;
  412. statement ok
  413. CREATE TABLE a.foo.t1 (x int);
  414. statement ok
  415. INSERT INTO a.foo.t1 VALUES (4), (5), (6);
  416. statement ok
  417. CREATE DATABASE b;
  418. statement ok
  419. CREATE SCHEMA b.foo;
  420. statement ok
  421. CREATE TABLE b.foo.t1 (y int);
  422. statement ok
  423. INSERT INTO b.foo.t1 VALUES (1), (2), (3);
  424. statement ok
  425. CREATE DATABASE c;
  426. statement ok
  427. CREATE SCHEMA c.foo;
  428. statement ok
  429. CREATE VIEW c.foo.v1 AS ( SELECT x, y FROM a.foo.t1, b.foo.t1 );
  430. query TT
  431. SHOW CREATE VIEW c.foo.v1;
  432. ----
  433. c.foo.v1
  434. CREATE VIEW c.foo.v1 AS SELECT x, y FROM a.foo.t1, b.foo.t1;
  435. statement ok
  436. ALTER SCHEMA b.foo RENAME TO bbb;
  437. query TT
  438. SHOW CREATE VIEW c.foo.v1;
  439. ----
  440. c.foo.v1
  441. CREATE VIEW c.foo.v1 AS SELECT x, y FROM a.foo.t1, b.bbb.t1;
  442. statement ok
  443. ALTER SCHEMA c.foo RENAME TO ccc;
  444. query TT
  445. SHOW CREATE VIEW c.ccc.v1;
  446. ----
  447. c.ccc.v1
  448. CREATE VIEW c.ccc.v1 AS SELECT x, y FROM a.foo.t1, b.bbb.t1;
  449. # Ambiguously refer to a schema.
  450. statement ok
  451. CREATE SCHEMA amb;
  452. statement ok
  453. CREATE TABLE amb.t1 (x int);
  454. statement ok
  455. CREATE DATABASE d;
  456. statement ok
  457. CREATE SCHEMA d.amb;
  458. statement ok
  459. CREATE TABLE d.amb.t1 (y int);
  460. statement ok
  461. CREATE VIEW d.amb.v1 AS SELECT amb.t1.x FROM amb.t1, d.amb.t1;
  462. query TT
  463. SHOW CREATE VIEW d.amb.v1;
  464. ----
  465. d.amb.v1
  466. CREATE VIEW d.amb.v1 AS SELECT amb.t1.x FROM materialize.amb.t1, d.amb.t1;
  467. statement error db error: ERROR: renaming conflict: in d\.amb\.v1, which uses d\.amb, ambiguous reference to schema named amb
  468. ALTER SCHEMA d.amb RENAME TO this_rename_will_fail;
  469. # Test subsource renames
  470. statement ok
  471. CREATE SOURCE s FROM LOAD GENERATOR AUCTION;
  472. statement ok
  473. CREATE TABLE accounts FROM SOURCE s (REFERENCE accounts);
  474. statement ok
  475. CREATE TABLE auctions FROM SOURCE s (REFERENCE auctions);
  476. statement ok
  477. CREATE TABLE bids FROM SOURCE s (REFERENCE bids);
  478. statement ok
  479. CREATE TABLE organizations FROM SOURCE s (REFERENCE organizations);
  480. statement ok
  481. CREATE TABLE users FROM SOURCE s (REFERENCE users);
  482. statement ok
  483. ALTER TABLE users RENAME TO userz
  484. statement ok
  485. SELECT * FROM userz LIMIT 0
  486. statement ok
  487. CREATE TABLE non_temp_base(a INT);
  488. statement ok
  489. CREATE TEMPORARY VIEW temp_view AS SELECT * FROM non_temp_base;
  490. query TT
  491. SHOW CREATE VIEW temp_view;
  492. ----
  493. mz_temp.temp_view
  494. CREATE TEMPORARY VIEW mz_temp.temp_view AS SELECT * FROM materialize.public_renamed.non_temp_base;
  495. statement ok
  496. ALTER TABLE non_temp_base RENAME TO non_temp_table;
  497. query TT
  498. SHOW CREATE VIEW temp_view;
  499. ----
  500. mz_temp.temp_view
  501. CREATE TEMPORARY VIEW mz_temp.temp_view AS SELECT * FROM materialize.public_renamed.non_temp_table;