Subject: BUG #19540: Inconsistent integer-to-octal formatting for permission GUCs in pg_settings (boot_val vs setting)

From: PG Bug reporting form <[email-masked]>
Date: Tue, 30 Jun 2026 06:45:35 +0000

The following bug has been logged on the website:

Bug reference:      19540
Logged by:          Jobin Augustine
Email address:      [email-masked]
PostgreSQL version: 18.4
Operating system:   All
Description:        

This is more of an undocumented behavior in all PostgreSQL versions.

Steps to reproduce:
postgres=# SELECT name, setting, boot_val
FROM pg_settings
WHERE name IN ('data_directory_mode', 'log_file_mode',
'unix_socket_permissions');

Actual Result :
          name           | setting | boot_val
-------------------------+---------+----------
 data_directory_mode     | 0700    | 448
 log_file_mode           | 0600    | 384
 unix_socket_permissions | 0777    | 511
(3 rows)

File/Directory permissions like 448,384 and 511 may not make a good sense
for a user. Either a decoded value or mentioning it in docs would be great.
Displaying the value consistent with "setting" column is most desirable from
a user perspective.

Thank you,
Jobin.

---

From: Tom Lane <[email-masked]>
Date: Tue, 30 Jun 2026 11:58:08 -0400

>           name           | setting | boot_val

Yeah, the min and max columns are confusing too.  That's because
we entrust the formatting to the "show_hook" for those variables,
and those hooks are defined to show the current value only.

Looking through the existing show_hooks, all the other ones seem to
be used to account for situations where the effective value depends on
more than just the GUC variable itself.  Maybe we should say that
a show_hook should be used only for that purpose and not for specially
formatting the value?  We could deal with these cases by inventing a
new GUC flag, say GUC_SHOW_IN_OCTAL, that could be applied to all the
relevant values.

			regards, tom lane