Thread

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Create a separate file listing backend types

  2. Replace postmaster.c's own backend type codes with BackendType

  1. refactor backend type lists

    Álvaro Herrera <alvherre@kurilemu.de> — 2025-07-15T18:30:36Z

    Hello
    
    We have lists of backend types scattered through the tree.  I found two
    current ones, and Euler Taveira wants to add a couple more[1].  His
    patch is actually blocked on not adding more, so this seems worth doing.
    Bikeshedding welcome (for a limited time).
    
    [1] https://postgr.es/m/313aa202-b5fa-4e3f-95d0-83425575c66d@app.fastmail.com
    
    A couple points.  First, launch_backend.c has its own strings for
    process names, inconsistent with the ones in miscinit.c.  I think we
    should ignore the ones in launch_backend.c, because they're less
    polished and not used for anything interesting, whereas the ones in
    miscinit.c::GetBackendTypeDesc() are -- particularly init_ps_display and
    pg_stat_activity.
    
    Second, in discussion [2] leading to commit 18d67a8d7d30 (Nov 2024) it
    was agreed to add support for translating backend type descriptions.
    I'm not really sure that this is useful.  It would be, if set_ps_display
    and pg_stat_activity used translated names, so that you could match what
    log messages say with what the process lists show.  But I think we've
    historically not translated those.  We have a few translatable strings
    as the argument of HandleChildCrash() in postmaster.c, but those are
    using names that are yet a third source of strings; I'm not a fan of
    this.  (For staters, if a translation decided to use non-ascii chars for
    process names, would that work okay in set_ps_display?  I bet it
    wouldn't, because that's using strlen()).  So I would propose to rewind
    a bit here, and remove translation from all those places so that the
    output is consistent (== usable) between log messages and ps/pg_stat_activity.
    
    [2] https://www.postgresql.org/message-id/flat/a102f15f-eac4-4ff2-af02-f9ff209ec66f%40iki.fi
    
    
    Third, I didn't do it here, but HandleChildCrash is currently called
    like
                    HandleChildCrash(pid, exitstatus,
                                     _("WAL writer process"));
    creating yet another source of strings to describe process types.
    
    I think it would be much better to avoid that by using
                    HandleChildCrash(pid, exitstatus,
                                     _(GetBackendTypeDesc(B_WAL_WRITER));
    
    instead.  If we decide to get rid of the translation, then
                    HandleChildCrash(pid, exitstatus,
                                     GetBackendTypeDesc(B_WAL_WRITER);
    
    This last one would be my preference actually.  Note that we use this
    string in an error that looks like this (LogChildExit):
    
            /*------
              translator: %s is a noun phrase describing a child process, such as
              "server process" */
                    (errmsg("%s (PID %d) exited with exit code %d",
                            procname, pid, WEXITSTATUS(exitstatus)),
    
    I would change this to
    errmsg("process %d of type \"%s\" exited with exit code %d",
           pid, procname, WEXITSTATUS())
    Note that in the original, the process name is translated, and in my
    proposal it wouldn't be.  (This helps match the log message with "ps"
    and pg_stat_activity).
    
    
    Fourth: patch 0002 is a necessary hack to get the proctype_list.h
    strings be picked up for translation by gettext in makefiles.  It's
    quite ugly!  I'd rather not have it at all.  I have no idea how to do
    this in Meson.
    
    -- 
    Álvaro Herrera        Breisgau, Deutschland  —  https://www.EnterpriseDB.com/
    "I dream about dreams about dreams", sang the nightingale
    under the pale moon (Sandman)
    
  2. Re: refactor backend type lists

    Euler Taveira <euler@eulerto.com> — 2025-07-28T19:53:26Z

    On Tue, Jul 15, 2025, at 3:30 PM, Álvaro Herrera wrote:
    >
    > We have lists of backend types scattered through the tree.  I found two
    > current ones, and Euler Taveira wants to add a couple more[1].  His
    > patch is actually blocked on not adding more, so this seems worth doing.
    > Bikeshedding welcome (for a limited time).
    >
    
    I was trying to find a general solution for Andres feedback related to backend
    types. It seems your proposal is good enough for future development in this
    area.
    
    > A couple points.  First, launch_backend.c has its own strings for
    > process names, inconsistent with the ones in miscinit.c.  I think we
    > should ignore the ones in launch_backend.c, because they're less
    > polished and not used for anything interesting, whereas the ones in
    > miscinit.c::GetBackendTypeDesc() are -- particularly init_ps_display and
    > pg_stat_activity.
    >
    
    Agree.
    
    > Second, in discussion [2] leading to commit 18d67a8d7d30 (Nov 2024) it
    > was agreed to add support for translating backend type descriptions.
    > I'm not really sure that this is useful.  It would be, if set_ps_display
    > and pg_stat_activity used translated names, so that you could match what
    > log messages say with what the process lists show.  But I think we've
    > historically not translated those.  We have a few translatable strings
    > as the argument of HandleChildCrash() in postmaster.c, but those are
    > using names that are yet a third source of strings; I'm not a fan of
    > this.  (For staters, if a translation decided to use non-ascii chars for
    > process names, would that work okay in set_ps_display?  I bet it
    > wouldn't, because that's using strlen()).  So I would propose to rewind
    > a bit here, and remove translation from all those places so that the
    > output is consistent (== usable) between log messages and ps/pg_stat_activity.
    >
    
    I'm not sure if it is a good idea to have translated backend description. The
    init_ps_display() output is certainly used to obtain information (PID?) from a
    process list. There is also the option %b from log_line_prefix that is used to
    filter log messages per backend type. The same applies to backend_type column
    from pg_stat_activity view.
    
    > Third, I didn't do it here, but HandleChildCrash is currently called
    > like
    >                 HandleChildCrash(pid, exitstatus,
    >                                  _("WAL writer process"));
    > creating yet another source of strings to describe process types.
    >
    > I think it would be much better to avoid that by using
    >                 HandleChildCrash(pid, exitstatus,
    >                                  _(GetBackendTypeDesc(B_WAL_WRITER));
    >
    > instead.  If we decide to get rid of the translation, then
    >                 HandleChildCrash(pid, exitstatus,
    >                                  GetBackendTypeDesc(B_WAL_WRITER);
    >
    
    GetBackendTypeDesc() is a good use for this case. Looking at the
    HandleChildCrash() function, I don't like the translated string (3rd argument)
    with the "process" word too.
    
    > This last one would be my preference actually.  Note that we use this
    > string in an error that looks like this (LogChildExit):
    >
    >         /*------
    >           translator: %s is a noun phrase describing a child process, such as
    >           "server process" */
    >                 (errmsg("%s (PID %d) exited with exit code %d",
    >                         procname, pid, WEXITSTATUS(exitstatus)),
    >
    > I would change this to
    > errmsg("process %d of type \"%s\" exited with exit code %d",
    >        pid, procname, WEXITSTATUS())
    > Note that in the original, the process name is translated, and in my
    > proposal it wouldn't be.  (This helps match the log message with "ps"
    > and pg_stat_activity).
    >
    
    +1. It might break translation. Your proposal is much better.
    
    >
    > Fourth: patch 0002 is a necessary hack to get the proctype_list.h
    > strings be picked up for translation by gettext in makefiles.  It's
    > quite ugly!  I'd rather not have it at all.  I have no idea how to do
    > this in Meson.
    >
    
    We generally don't translated the other PG_XXX lists. I wouldn't do for the
    reasons mentioned above. Let's have a stable list of backend types that we can
    filter.
    
    I'm attaching complementary patch that implements what you proposed above. I
    also suggest that you rename the new file from proctype_list.h to
    proctypelist.h. The other similar files don't use underscore.
    
    
    -- 
    Euler Taveira
    EDB   https://www.enterprisedb.com/
  3. Re: refactor backend type lists

    Álvaro Herrera <alvherre@kurilemu.de> — 2025-07-28T21:13:44Z

    On 2025-Jul-28, Euler Taveira wrote:
    
    > On Tue, Jul 15, 2025, at 3:30 PM, Álvaro Herrera wrote:
    
    > > Second, in discussion [2] leading to commit 18d67a8d7d30 (Nov 2024) it
    > > was agreed to add support for translating backend type descriptions.
    > > I'm not really sure that this is useful.  It would be, if set_ps_display
    > > and pg_stat_activity used translated names, so that you could match what
    > > log messages say with what the process lists show.  But I think we've
    > > historically not translated those.  We have a few translatable strings
    > > as the argument of HandleChildCrash() in postmaster.c, but those are
    > > using names that are yet a third source of strings; I'm not a fan of
    > > this.  (For staters, if a translation decided to use non-ascii chars for
    > > process names, would that work okay in set_ps_display?  I bet it
    > > wouldn't, because that's using strlen()).  So I would propose to rewind
    > > a bit here, and remove translation from all those places so that the
    > > output is consistent (== usable) between log messages and ps/pg_stat_activity.
    > 
    > I'm not sure if it is a good idea to have translated backend description. The
    > init_ps_display() output is certainly used to obtain information (PID?) from a
    > process list. There is also the option %b from log_line_prefix that is used to
    > filter log messages per backend type. The same applies to backend_type column
    > from pg_stat_activity view.
    
    I should have let you know that I spent some time on this today as well
    to avoid duplicating efforts.  Here are my patches, incorporating your
    fixup -- I hadn't looked at your 0004 yet, so I wrote it differently,
    passing the BackendType enum directly to LogChildExit (as well as
    HandleChildCrash), so it is the former function that does the call to
    GetBackendTypeDesc() to obtain the string.  I think this is better
    because the untranslated part of the sentence is enclosed in quotes,
    which I think is better.  However it meant I had to add a bit of a hack
    to cope with the background worker separate bgw_type string.
    
    So I came up with things as attached, incorporating your 0003 fixup.
    What do you think?
    
    
    This is likely not final, because the lines for background workers look
    a bit inconsistent:
    
    2025-07-28 23:10:02.316 CEST worker_spi dynamic[1876557] FATAL:  terminating background worker "worker_spi dynamic" due to administrator command
    2025-07-28 23:10:02.317 CEST postmaster[1876543] LOG:  "background worker" process of type "logical replication launcher" (PID 1876552) exited with exit code 1
    
    
    (I, for one, would be VERY HAPPY to not have to translate the phrase
    "background worker".  There's just no reasonable way.)
    
    -- 
    Álvaro Herrera         PostgreSQL Developer  —  https://www.EnterpriseDB.com/
    
  4. Re: refactor backend type lists

    Euler Taveira <euler@eulerto.com> — 2025-07-29T12:46:33Z

    On Mon, Jul 28, 2025, at 6:13 PM, Álvaro Herrera wrote:
    > I should have let you know that I spent some time on this today as well
    > to avoid duplicating efforts.  Here are my patches, incorporating your
    > fixup -- I hadn't looked at your 0004 yet, so I wrote it differently,
    > passing the BackendType enum directly to LogChildExit (as well as
    > HandleChildCrash), so it is the former function that does the call to
    > GetBackendTypeDesc() to obtain the string.  I think this is better
    > because the untranslated part of the sentence is enclosed in quotes,
    > which I think is better.  However it meant I had to add a bit of a hack
    > to cope with the background worker separate bgw_type string.
    >
    > So I came up with things as attached, incorporating your 0003 fixup.
    > What do you think?
    >
    Passing BackendType to HandleChildCrash() and LogChildExit() is a good idea.
    Someone might forget to add GetBackendTypeDesc(B_XXX) in the future.
    
    Talking about the messages, I think we should have a clean message. IMO
    "process of type" seems confusing at first glance. My suggestion is to use:
    
    checkpointer process (PID %d) ...
    
    and
    
    background worker process "foo" (PID %d) ...
    
    or a short variant
    
    background worker "foo" (PID %d) ...
    
    You added quotes to say it is an untranslated part of the sentence but the
    current message doesn't have quotes. The background worker name (addtype)
    should have quotes because it is a different string depending on the module.
    However, the proctype is a stable and well known string. Isn't it better to
    improve the translator command saying "don't translate the proctype" instead of
    adding quotes?
    
    Another suggestion is to rename "addtype" variable. The substring "add" is
    ambiguous when you want to meant "additional". Although you replaced "procname"
    with "proctype", I think "procname" can be a good fit for this variable.
    
    >
    > This is likely not final, because the lines for background workers look
    > a bit inconsistent:
    >
    > 2025-07-28 23:10:02.316 CEST worker_spi dynamic[1876557] FATAL:  
    > terminating background worker "worker_spi dynamic" due to administrator 
    > command
    > 2025-07-28 23:10:02.317 CEST postmaster[1876543] LOG:  "background 
    > worker" process of type "logical replication launcher" (PID 1876552) 
    > exited with exit code 1
    >
    
    It is not related to this patch but this message is annoying and confusing. I
    expect in the future we have a notion of in-core background worker so we can
    differentiate exit code and omit this message for logical replication (and any
    in-core feature that uses background worker). There is a patch from Thomas that
    tries to improve it [1].
    
    >
    > (I, for one, would be VERY HAPPY to not have to translate the phrase
    > "background worker".  There's just no reasonable way.)
    >
    +1. As I said the process type is a stable and well known string that we don't
    expect to change.
    
    
    [1] https://www.postgresql.org/message-id/CAEepm%3D10MtmKeDc1WxBM0PQM9OgtNy%2BRCeWqz40pZRRS3PNo5Q%40mail.gmail.com
    
    
    -- 
    Euler Taveira
    EDB   https://www.enterprisedb.com/
    
    
    
    
  5. Re: refactor backend type lists

    Jonathan Gonzalez V. <jonathan.abdiel@gmail.com> — 2025-09-18T09:56:38Z

    On Thu, Sep 18, 2025 at 11:33 AM Álvaro Herrera <alvherre@kurilemu.de> wrote:
    
    > > I'm not sure if it is a good idea to have translated backend description. The
    > > init_ps_display() output is certainly used to obtain information (PID?) from a
    > > process list. There is also the option %b from log_line_prefix that is used to
    > > filter log messages per backend type. The same applies to backend_type column
    > > from pg_stat_activity view.
    >
    > I should have let you know that I spent some time on this today as well
    > to avoid duplicating efforts.  Here are my patches, incorporating your
    > fixup -- I hadn't looked at your 0004 yet, so I wrote it differently,
    > passing the BackendType enum directly to LogChildExit (as well as
    > HandleChildCrash), so it is the former function that does the call to
    > GetBackendTypeDesc() to obtain the string.  I think this is better
    > because the untranslated part of the sentence is enclosed in quotes,
    > which I think is better.  However it meant I had to add a bit of a hack
    > to cope with the background worker separate bgw_type string.
    >
    > So I came up with things as attached, incorporating your 0003 fixup.
    > What do you think?
    >
    
    The call to gettext_noop() was missing, hence, the translation for the
    backends was
    missing. I've attached a third commit to your patch adding the missing
    gettext_noop()
    and also adding the include directory to the nls.mk Makefile which
    will add proctypelist.h
    to the list of files used to generate the po.
    
    I've tested the patch using `make -C src/backend update-po` and the
    strings were added
    properly.
    
    Regards,
    
  6. Re: refactor backend type lists

    Álvaro Herrera <alvherre@kurilemu.de> — 2025-09-26T12:28:52Z

    On 2025-Sep-18, Jonathan Abdiel Gonzalez Valdebenito wrote:
    
    > The call to gettext_noop() was missing, hence, the translation for the
    > backends was missing. I've attached a third commit to your patch
    > adding the missing gettext_noop() and also adding the include
    > directory to the nls.mk Makefile which will add proctypelist.h to the
    > list of files used to generate the po.
    
    Thank you, that makes sense.  CI says that we still have problems in
    mingw32 cross-compile apparently because of 0002, so I decided to ditch
    it for now (it's non-essential anyway).  Another failure is `make
    headerscheck`, which hopefully I've fixed her: just tell it to skip this
    file.  Here's v4, which I would push right away except I want to see
    if CI now turns green.
    
    We can pursue 0002 later, if anybody feels the motivation to do so.  I
    think it'd be a good idea.
    
    -- 
    Álvaro Herrera        Breisgau, Deutschland  —  https://www.EnterpriseDB.com/
    "Ed is the standard text editor."
          http://groups.google.com/group/alt.religion.emacs/msg/8d94ddab6a9b0ad3
    
  7. Re: refactor backend type lists

    Álvaro Herrera <alvherre@kurilemu.de> — 2025-09-26T13:22:48Z

    On 2025-Sep-26, Álvaro Herrera wrote:
    
    > Thank you, that makes sense.  CI says that we still have problems in
    > mingw32 cross-compile apparently because of 0002, so I decided to ditch
    > it for now (it's non-essential anyway).  Another failure is `make
    > headerscheck`, which hopefully I've fixed her: just tell it to skip this
    > file.  Here's v4, which I would push right away except I want to see
    > if CI now turns green.
    
    Pushed now, thanks.
    
    -- 
    Álvaro Herrera               48°01'N 7°57'E  —  https://www.EnterpriseDB.com/