On Wed, Sep 07, 2022 at 03:29:08PM +0900, Michael Paquier wrote: > At the end, I have not taken the approach to use errdetail() for this > problem as errormsg_buf is designed to include an error string. So, I > have finished by refining the error messages generated in > RestoreBlockImage(), consuming them with an ERRCODE_INTERNAL_ERROR.
The cases involving max_block_id, has_image and in_use are still "can't happen" cases, which used to hit elog(), and INTERNAL_ERROR sounds right for them. But that's also what'll happen when attempting to replay WAL using a postgres build which doesn't support the necessary compression method. I ran into this while compiling postgres locally while reporting the recovery_prefetch bug, when I failed to compile --with-zstd. Note that basebackup does: src/backend/backup/basebackup_zstd.c- ereport(ERROR, src/backend/backup/basebackup_zstd.c- (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), src/backend/backup/basebackup_zstd.c: errmsg("zstd compression is not supported by this build"))); src/backend/backup/basebackup_zstd.c- return NULL; /* keep compiler quiet */ -- Justin