41 lines
1.9 KiB
Plaintext
41 lines
1.9 KiB
Plaintext
--
|
|
-- Verify correct calculation of checksums
|
|
--
|
|
-- Postgres' checksum algorithm produces different answers on little-endian
|
|
-- and big-endian machines. The results of this test also vary depending
|
|
-- on the configured block size. This test has several different expected
|
|
-- results files to handle the following possibilities:
|
|
--
|
|
-- BLCKSZ end file
|
|
-- 8K LE checksum.out
|
|
-- 8K BE checksum_1.out
|
|
--
|
|
-- In future we might provide additional expected-results files for other
|
|
-- block sizes, but there seems little point as long as so many other
|
|
-- test scripts also show false failures for non-default block sizes.
|
|
--
|
|
-- This is to label the results files with blocksize:
|
|
SHOW block_size;
|
|
block_size
|
|
------------
|
|
8192
|
|
(1 row)
|
|
|
|
SHOW block_size \gset
|
|
-- Apply page_checksum() to some different data patterns and block numbers
|
|
SELECT blkno,
|
|
page_checksum(decode(repeat('01', :block_size), 'hex'), blkno) AS checksum_01,
|
|
page_checksum(decode(repeat('04', :block_size), 'hex'), blkno) AS checksum_04,
|
|
page_checksum(decode(repeat('ff', :block_size), 'hex'), blkno) AS checksum_ff,
|
|
page_checksum(decode(repeat('abcd', :block_size / 2), 'hex'), blkno) AS checksum_abcd,
|
|
page_checksum(decode(repeat('e6d6', :block_size / 2), 'hex'), blkno) AS checksum_e6d6,
|
|
page_checksum(decode(repeat('4a5e', :block_size / 2), 'hex'), blkno) AS checksum_4a5e
|
|
FROM generate_series(0, 100, 50) AS a (blkno);
|
|
blkno | checksum_01 | checksum_04 | checksum_ff | checksum_abcd | checksum_e6d6 | checksum_4a5e
|
|
-------+-------------+-------------+-------------+---------------+---------------+---------------
|
|
0 | -16327 | 8766 | -2722 | 13757 | -11485 | -31426
|
|
50 | -16281 | 8780 | -2708 | 13771 | -11503 | -31440
|
|
100 | -16235 | 8866 | -2758 | 13721 | -11577 | -31518
|
|
(3 rows)
|
|
|