Hi,
On linux, many filesystems default to remounting themselves read-only when
metadata IO fails. I.e. one common reaction to disks failing is a previously
read-write filesystem becoming read-only.
When e.g. trying to create a file on such a filesystem, errno is set to
EROFS. Writing with pre-existing FDs seems to mostly generate EIO.
In errcode_for_file_access(), we map EROFS to
ERRCODE_INSUFFICIENT_PRIVILEGE. An error code that's used very widely for many
other purposes.
Because it is so widely used, just searching for log messages with an
ERRCODE_INSUFFICIENT_PRIVILEGE sqlstate isn't promising, obviously stuff like
ERROR: permission denied to set parameter \"%s\"
isn't interesting.
Nor is EROFS a question of insufficient privileges - the filesystem is read
only, even root would not be permitted to write.
I think ERRCODE_IO_ERROR would be more appropriate than
ERRCODE_INSUFFICIENT_PRIVILEGE, but not exactly great.
The only real downside would be a slightly odd sqlstate for postmaster's
creation of a lock file. If a tablespace were mounted read-only, IO_ERROR
actually seems fine.
Greetings,
Andres Freund