Fix contrib/pageinspect's test for sequences.
authorNathan Bossart <[email protected]>
Fri, 13 Sep 2024 15:16:40 +0000 (10:16 -0500)
committerNathan Bossart <[email protected]>
Fri, 13 Sep 2024 15:16:40 +0000 (10:16 -0500)
I managed to break this test in two different ways in commit
05036a3155.

First, the output of the new call to tuple_data_split() on the test
sequence is dependent on endianness.  This is fixed by setting a
special start value for the test sequence that produces the same
output regardless of the endianness of the machine.

Second, on versions older than v15, the new test case fails under
"force_parallel_mode = regress" with the following error:

ERROR:  cannot access temporary tables during a parallel operation

This is because pageinspect's disk-accessing functions are
incorrectly marked PARALLEL SAFE on versions older than v15 (see
commit aeaaf520f4 for details).  This one is fixed by changing the
test sequence to be permanent.  The only reason it was previously
marked temporary was to avoid needing a DROP SEQUENCE command at
the end of the test.  Unlike some other tests in this file, the use
of a permanent sequence here shouldn't result in any test
instability like what was fixed by commit e2933a6e11.

Reviewed-by: Tom Lane
Discussion: https://postgr.es/m/ZuOKOut5hhDlf_bP%40nathan
Backpatch-through: 12

contrib/pageinspect/expected/page.out
contrib/pageinspect/sql/page.sql

index 51dfc6c4d3b8f65dd4dcaa5ae529a18b7447c632..1a3197f11049f2ad4e1cf403f3719cfb3a87d626 100644 (file)
@@ -145,11 +145,12 @@ SELECT page_checksum(decode(repeat('00', :block_size), 'hex'), 1);
 (1 row)
 
 -- tests for sequences
-create temporary sequence test_sequence;
+create sequence test_sequence start 72057594037927937;
 select tuple_data_split('test_sequence'::regclass, t_data, t_infomask, t_infomask2, t_bits)
   from heap_page_items(get_raw_page('test_sequence', 0));
                    tuple_data_split                    
 -------------------------------------------------------
- {"\\x0100000000000000","\\x0000000000000000","\\x00"}
+ {"\\x0100000000000001","\\x0000000000000000","\\x00"}
 (1 row)
 
+drop sequence test_sequence;
index 7580491c6dbaf365d79a320c3f8b567b03177125..596c989ce0ce69ebc6875528dac0db899e1a73f0 100644 (file)
@@ -69,6 +69,7 @@ SELECT page_header(decode(repeat('00', :block_size), 'hex'));
 SELECT page_checksum(decode(repeat('00', :block_size), 'hex'), 1);
 
 -- tests for sequences
-create temporary sequence test_sequence;
+create sequence test_sequence start 72057594037927937;
 select tuple_data_split('test_sequence'::regclass, t_data, t_infomask, t_infomask2, t_bits)
   from heap_page_items(get_raw_page('test_sequence', 0));
+drop sequence test_sequence;