]> granicus.if.org Git - postgresql/blobdiff - src/test/regress/expected/alter_table.out
Fix table rewrites that include a column without a default.
[postgresql] / src / test / regress / expected / alter_table.out
index 23d4265555cda7b2a9a28e2821ae3ce9bc7a2052..41a7bcd6d0d2defa01276ee2bde9b667a0f66b6b 100644 (file)
@@ -2436,6 +2436,53 @@ select * from at_view_2;
 drop view at_view_2;
 drop view at_view_1;
 drop table at_base_table;
+-- check adding a column not iself requiring a rewrite, together with
+-- a column requiring a default (bug #16038)
+-- ensure that rewrites aren't silently optimized away, removing the
+-- value of the test
+CREATE OR REPLACE FUNCTION evtrig_rewrite_log() RETURNS event_trigger
+LANGUAGE plpgsql AS $$
+BEGIN
+     RAISE WARNING 'rewriting table %',
+        pg_event_trigger_table_rewrite_oid()::regclass;
+END;
+$$;
+CREATE EVENT TRIGGER evtrig_rewrite_log ON table_rewrite
+    EXECUTE PROCEDURE evtrig_rewrite_log();
+CREATE TABLE rewrite_test(col text);
+INSERT INTO rewrite_test VALUES ('something');
+INSERT INTO rewrite_test VALUES (NULL);
+-- empty[12] doesn't need rewrite, but notempty[12]_rewrite will force one
+ALTER TABLE rewrite_test
+    ADD COLUMN empty1 text,
+    ADD COLUMN notempty1_rewrite serial;
+WARNING:  rewriting table rewrite_test
+ALTER TABLE rewrite_test
+    ADD COLUMN notempty2_rewrite serial,
+    ADD COLUMN empty2 text;
+WARNING:  rewriting table rewrite_test
+-- also check that fast defaults cause no problem, first without rewrite
+ALTER TABLE rewrite_test
+    ADD COLUMN empty3 text,
+    ADD COLUMN notempty3_norewrite int default 42;
+ALTER TABLE rewrite_test
+    ADD COLUMN notempty4_norewrite int default 42,
+    ADD COLUMN empty4 text;
+-- then with rewrite
+ALTER TABLE rewrite_test
+    ADD COLUMN empty5 text,
+    ADD COLUMN notempty5_norewrite int default 42,
+    ADD COLUMN notempty5_rewrite serial;
+WARNING:  rewriting table rewrite_test
+ALTER TABLE rewrite_test
+    ADD COLUMN notempty6_rewrite serial,
+    ADD COLUMN empty6 text,
+    ADD COLUMN notempty6_norewrite int default 42;
+WARNING:  rewriting table rewrite_test
+-- cleanup
+drop event trigger evtrig_rewrite_log;
+drop function evtrig_rewrite_log();
+DROP TABLE rewrite_test;
 --
 -- lock levels
 --