Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitae5cae5

Browse files
committed
Replace alter_table.sql test usage of event triggers.
The test in93765bd added an event trigger to ensure that thetested table rewrites do not get optimized away (as happened in thepast). But doing so would require running the tests in isolation, asotherwise the trigger might also fire in concurrent sessions, causingtest failures there.Reported-By: Tom LaneDiscussion:https://postgr.es/m/3328.1570740683@sss.pgh.pa.usBackpatch: 12, just as93765bd
1 parent1de4fd1 commitae5cae5

File tree

2 files changed

+116
-60
lines changed

2 files changed

+116
-60
lines changed

‎src/test/regress/expected/alter_table.out

Lines changed: 73 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2440,48 +2440,89 @@ drop table at_base_table;
24402440
-- a column requiring a default (bug #16038)
24412441
-- ensure that rewrites aren't silently optimized away, removing the
24422442
-- value of the test
2443-
CREATE OR REPLACE FUNCTION evtrig_rewrite_log() RETURNS event_trigger
2443+
CREATE FUNCTION check_ddl_rewrite(p_tablename regclass, p_ddl text)
2444+
RETURNS boolean
24442445
LANGUAGE plpgsql AS $$
2446+
DECLARE
2447+
v_relfilenode oid;
24452448
BEGIN
2446-
RAISE WARNING 'rewriting table %',
2447-
pg_event_trigger_table_rewrite_oid()::regclass;
2449+
v_relfilenode := relfilenode FROM pg_class WHERE oid = p_tablename;
2450+
2451+
EXECUTE p_ddl;
2452+
2453+
RETURN v_relfilenode <> (SELECT relfilenode FROM pg_class WHERE oid = p_tablename);
24482454
END;
24492455
$$;
2450-
CREATE EVENT TRIGGER evtrig_rewrite_log ON table_rewrite
2451-
EXECUTE PROCEDURE evtrig_rewrite_log();
24522456
CREATE TABLE rewrite_test(col text);
24532457
INSERT INTO rewrite_test VALUES ('something');
24542458
INSERT INTO rewrite_test VALUES (NULL);
2455-
-- empty[12] doesn't need rewrite, but notempty[12]_rewrite will force one
2456-
ALTER TABLE rewrite_test
2457-
ADD COLUMN empty1 text,
2458-
ADD COLUMN notempty1_rewrite serial;
2459-
WARNING: rewriting table rewrite_test
2460-
ALTER TABLE rewrite_test
2461-
ADD COLUMN notempty2_rewrite serial,
2462-
ADD COLUMN empty2 text;
2463-
WARNING: rewriting table rewrite_test
2459+
-- empty[12] don't need rewrite, but notempty[12]_rewrite will force one
2460+
SELECT check_ddl_rewrite('rewrite_test', $$
2461+
ALTER TABLE rewrite_test
2462+
ADD COLUMN empty1 text,
2463+
ADD COLUMN notempty1_rewrite serial;
2464+
$$);
2465+
check_ddl_rewrite
2466+
-------------------
2467+
t
2468+
(1 row)
2469+
2470+
SELECT check_ddl_rewrite('rewrite_test', $$
2471+
ALTER TABLE rewrite_test
2472+
ADD COLUMN notempty2_rewrite serial,
2473+
ADD COLUMN empty2 text;
2474+
$$);
2475+
check_ddl_rewrite
2476+
-------------------
2477+
t
2478+
(1 row)
2479+
24642480
-- also check that fast defaults cause no problem, first without rewrite
2465-
ALTER TABLE rewrite_test
2466-
ADD COLUMN empty3 text,
2467-
ADD COLUMN notempty3_norewrite int default 42;
2468-
ALTER TABLE rewrite_test
2469-
ADD COLUMN notempty4_norewrite int default 42,
2470-
ADD COLUMN empty4 text;
2481+
SELECT check_ddl_rewrite('rewrite_test', $$
2482+
ALTER TABLE rewrite_test
2483+
ADD COLUMN empty3 text,
2484+
ADD COLUMN notempty3_norewrite int default 42;
2485+
$$);
2486+
check_ddl_rewrite
2487+
-------------------
2488+
f
2489+
(1 row)
2490+
2491+
SELECT check_ddl_rewrite('rewrite_test', $$
2492+
ALTER TABLE rewrite_test
2493+
ADD COLUMN notempty4_norewrite int default 42,
2494+
ADD COLUMN empty4 text;
2495+
$$);
2496+
check_ddl_rewrite
2497+
-------------------
2498+
f
2499+
(1 row)
2500+
24712501
-- then with rewrite
2472-
ALTER TABLE rewrite_test
2473-
ADD COLUMN empty5 text,
2474-
ADD COLUMN notempty5_norewrite int default 42,
2475-
ADD COLUMN notempty5_rewrite serial;
2476-
WARNING: rewriting table rewrite_test
2477-
ALTER TABLE rewrite_test
2478-
ADD COLUMN notempty6_rewrite serial,
2479-
ADD COLUMN empty6 text,
2480-
ADD COLUMN notempty6_norewrite int default 42;
2481-
WARNING: rewriting table rewrite_test
2502+
SELECT check_ddl_rewrite('rewrite_test', $$
2503+
ALTER TABLE rewrite_test
2504+
ADD COLUMN empty5 text,
2505+
ADD COLUMN notempty5_norewrite int default 42,
2506+
ADD COLUMN notempty5_rewrite serial;
2507+
$$);
2508+
check_ddl_rewrite
2509+
-------------------
2510+
t
2511+
(1 row)
2512+
2513+
SELECT check_ddl_rewrite('rewrite_test', $$
2514+
ALTER TABLE rewrite_test
2515+
ADD COLUMN notempty6_rewrite serial,
2516+
ADD COLUMN empty6 text,
2517+
ADD COLUMN notempty6_norewrite int default 42;
2518+
$$);
2519+
check_ddl_rewrite
2520+
-------------------
2521+
t
2522+
(1 row)
2523+
24822524
-- cleanup
2483-
drop event trigger evtrig_rewrite_log;
2484-
drop function evtrig_rewrite_log();
2525+
DROP FUNCTION check_ddl_rewrite(regclass, text);
24852526
DROP TABLE rewrite_test;
24862527
--
24872528
-- lock levels

‎src/test/regress/sql/alter_table.sql

Lines changed: 43 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1555,47 +1555,62 @@ drop table at_base_table;
15551555

15561556
-- ensure that rewrites aren't silently optimized away, removing the
15571557
-- value of the test
1558-
CREATE OR REPLACEFUNCTIONevtrig_rewrite_log() RETURNS event_trigger
1558+
CREATEFUNCTIONcheck_ddl_rewrite(p_tablename regclass, p_ddltext)
1559+
RETURNSboolean
15591560
LANGUAGE plpgsqlAS $$
1561+
DECLARE
1562+
v_relfilenodeoid;
15601563
BEGIN
1561-
RAISE WARNING'rewriting table %',
1562-
pg_event_trigger_table_rewrite_oid()::regclass;
1564+
v_relfilenode := relfilenodeFROM pg_classWHEREoid= p_tablename;
1565+
1566+
EXECUTE p_ddl;
1567+
1568+
RETURN v_relfilenode<> (SELECT relfilenodeFROM pg_classWHEREoid= p_tablename);
15631569
END;
15641570
$$;
1565-
CREATE EVENT TRIGGER evtrig_rewrite_logON table_rewrite
1566-
EXECUTE PROCEDURE evtrig_rewrite_log();
15671571

15681572
CREATETABLErewrite_test(coltext);
15691573
INSERT INTO rewrite_testVALUES ('something');
15701574
INSERT INTO rewrite_testVALUES (NULL);
15711575

1572-
-- empty[12] doesn't need rewrite, but notempty[12]_rewrite will force one
1573-
ALTERTABLE rewrite_test
1574-
ADD COLUMN empty1text,
1575-
ADD COLUMN notempty1_rewriteserial;
1576-
ALTERTABLE rewrite_test
1577-
ADD COLUMN notempty2_rewriteserial,
1578-
ADD COLUMN empty2text;
1576+
-- empty[12] don't need rewrite, but notempty[12]_rewrite will force one
1577+
SELECT check_ddl_rewrite('rewrite_test', $$
1578+
ALTERTABLE rewrite_test
1579+
ADD COLUMN empty1text,
1580+
ADD COLUMN notempty1_rewriteserial;
1581+
$$);
1582+
SELECT check_ddl_rewrite('rewrite_test', $$
1583+
ALTERTABLE rewrite_test
1584+
ADD COLUMN notempty2_rewriteserial,
1585+
ADD COLUMN empty2text;
1586+
$$);
15791587
-- also check that fast defaults cause no problem, first without rewrite
1580-
ALTERTABLE rewrite_test
1581-
ADD COLUMN empty3text,
1582-
ADD COLUMN notempty3_norewriteint default42;
1583-
ALTERTABLE rewrite_test
1584-
ADD COLUMN notempty4_norewriteint default42,
1585-
ADD COLUMN empty4text;
1588+
SELECT check_ddl_rewrite('rewrite_test', $$
1589+
ALTERTABLE rewrite_test
1590+
ADD COLUMN empty3text,
1591+
ADD COLUMN notempty3_norewriteint default42;
1592+
$$);
1593+
SELECT check_ddl_rewrite('rewrite_test', $$
1594+
ALTERTABLE rewrite_test
1595+
ADD COLUMN notempty4_norewriteint default42,
1596+
ADD COLUMN empty4text;
1597+
$$);
15861598
-- then with rewrite
1587-
ALTERTABLE rewrite_test
1588-
ADD COLUMN empty5text,
1589-
ADD COLUMN notempty5_norewriteint default42,
1590-
ADD COLUMN notempty5_rewriteserial;
1591-
ALTERTABLE rewrite_test
1592-
ADD COLUMN notempty6_rewriteserial,
1593-
ADD COLUMN empty6text,
1594-
ADD COLUMN notempty6_norewriteint default42;
1599+
SELECT check_ddl_rewrite('rewrite_test', $$
1600+
ALTERTABLE rewrite_test
1601+
ADD COLUMN empty5text,
1602+
ADD COLUMN notempty5_norewriteint default42,
1603+
ADD COLUMN notempty5_rewriteserial;
1604+
$$);
1605+
SELECT check_ddl_rewrite('rewrite_test', $$
1606+
ALTERTABLE rewrite_test
1607+
ADD COLUMN notempty6_rewriteserial,
1608+
ADD COLUMN empty6text,
1609+
ADD COLUMN notempty6_norewriteint default42;
1610+
$$);
15951611

15961612
-- cleanup
1597-
drop event trigger evtrig_rewrite_log;
1598-
dropfunction evtrig_rewrite_log();
1613+
DROPFUNCTION check_ddl_rewrite(regclass,text);
15991614
DROPTABLE rewrite_test;
16001615

16011616
--

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp