Skip to content

Troubleshooting

Quick triage

Symptom Likely cause Fix
function ... does not exist Extension not created, or older than the function CREATE EXTENSION; check extversion
permission denied for table Missing SELECT Grant table-level SELECT
row-level security error RLS cannot be applied to a direct heap scan Use a non-RLS role or exclude the table
unknown checksum algorithm Typo or extension older than 2.2 Use fnv32/fnv64; upgrade
unsupported baseline format Old CLI reading a v2 baseline Upgrade the CLI
baseline hashes differ v1/FNV32 compared with v2/FNV64 Do not mix formats
physical baseline belongs to another ... Physical checksum used across clusters/databases Capture a new baseline
Scan is slow Parallelism disabled or statement timeout Set workers and a larger timeout

Extension is not installed

CREATE EXTENSION pg_integrity_checksums;

Permission denied

The checksum functions require SELECT on each object. Row-level security is rejected because a direct heap scan cannot apply policies. Use a role with SELECT or restrict the scope with the CLI filters.

Unknown checksum algorithm

The generic API accepts exactly fnv32 and fnv64:

SELECT pg_table_logical_checksum('public.orders'::regclass, 'fnv64');

If the function exists but the algorithm is rejected, check spelling and whether the installed extension provides the generic overloads (extversion >= 2.2).

Old CLI cannot read a v2 baseline

A v2 baseline starts with:

pg_integrity_checksums.baseline/v2

Upgrade the CLI to 0.4 or newer. Do not rewrite the format by hand; the hash algorithm and checksum values are linked.

Baselines use different hashes

diff and verify refuse to compare incompatible algorithms. Capture both sides with the same --hash setting, or migrate both to v2.

Physical baseline rejected

A physical baseline is tied to one cluster and database. Recreate it on the current cluster; do not compare physical checksums across replicas.

Slow scans

Use the extension workers and a larger timeout:

pg_integrity_checksums verify --workers 4 --timeout 30m --baseline baseline.json

For repeated verification of a logical baseline, see --changed-since in the CLI contract.