Thread

  1. Re: Feature: psql - display current search_path in prompt

    Florents Tselai <florents.tselai@gmail.com> — 2025-06-10T13:37:57Z

    
    > On 10 Jun 2025, at 4:09 PM, Florents Tselai <florents.tselai@gmail.com> wrote:
    > 
    > 
    > 
    >> On 10 Jun 2025, at 3:51 PM, Jim Jones <jim.jones@uni-muenster.de> wrote:
    >> 
    >> Hi Florents
    >> 
    >> On 10.06.25 13:36, Florents Tselai wrote:
    >>> 
    >>> On Tue, Jun 10, 2025 at 2:08 AM Jelte Fennema-Nio <postgres@jeltef.nl
    >>> <mailto:postgres@jeltef.nl>> wrote:
    >>> 
    >>>    On Mon, 9 Jun 2025 at 17:54, Florents Tselai
    >>>    <florents.tselai@gmail.com <mailto:florents.tselai@gmail.com>> wrote:
    >>>> Here’s a quick attempt that makes %S substitue for a search_path
    >>>> Like
    >>>>   \set PROMPT1 'user:%n search_path: %S'
    >>> 
    >>>    +   else
    >>>    +       return PQuser(pset.db);
    >>> 
    >>>    That seems like a copy paste error. If we don't have data for it, we
    >>>    should either use the empty string, or some string like "<unknown>".
    >>> 
    >>> 
    >>> Opted for an empty string
    >>>  
    >>> 
    >>>    Other than that, the patch looks good (but I haven't tested it yet).
    >>> 
    >> 
    >> 
    >> I've taken a quick look at the patch, and it seems to work as expected.
    >> 
    >> == PROMPT1 ==
    >> 
    >> postgres=# \set PROMPT1 '(search_path: %S) ;; '
    >> (search_path: "$user", public) ;; SET search_path TO s1, public;
    >> SET
    >> (search_path: s1, public) ;; SET search_path TO s2, public;
    >> SET
    >> (search_path: s2, public) ;; RESET search_path;
    >> RESET
    >> (search_path: "$user", public) ;;
    >> 
    >> == PROMPT2 ==
    >> 
    >> postgres=# \set PROMPT2 '(search_path: %S) ** '
    >> postgres=# SELECT
    >> (search_path: "$user", public) ** ^C
    >> postgres=# SET search_path TO s1, public;
    >> SET
    >> postgres=# SELECT
    >> (search_path: s1, public) ** ^C
    >> postgres=# SET search_path TO s2, public;
    >> SET
    >> postgres=# SELECT
    >> (search_path: s2, public) ** ^C
    >> postgres=# RESET search_path;
    >> RESET
    >> postgres=# SELECT
    >> (search_path: "$user", public) **
    >> 
    >> 
    >> == PROMPT3 ==
    >> 
    >> postgres=# \set PROMPT3 '(search_path: %S) ## '
    >> postgres=# COPY t1 (a) FROM STDIN;
    >> Enter data to be copied followed by a newline.
    >> End with a backslash and a period on a line by itself, or an EOF signal.
    >> (search_path: "$user", public) ## 1
    >> (search_path: "$user", public) ## 2
    >> (search_path: "$user", public) ## \.
    >> COPY 2
    >> postgres=# SET search_path TO s1, public;
    >> SET
    >> postgres=# COPY t1 (a) FROM STDIN;
    >> Enter data to be copied followed by a newline.
    >> End with a backslash and a period on a line by itself, or an EOF signal.
    >> (search_path: s1, public) ## 42
    >> (search_path: s1, public) ## 73
    >> (search_path: s1, public) ## \.
    >> COPY 2
    >> postgres=# RESET search_path;
    >> RESET
    >> postgres=# COPY t1 (a) FROM STDIN;
    >> Enter data to be copied followed by a newline.
    >> End with a backslash and a period on a line by itself, or an EOF signal.
    >> (search_path: "$user", public) ## 0
    >> (search_path: "$user", public) ## 1
    >> (search_path: "$user", public) ## \.
    >> COPY 2
    >> 
    >> Documentation looks ok as well -- it aligns with the other entries in
    >> the file.
    > 
    > Thanks for the review. 
    > 
    >> 
    >>> 
    >>> Btw - I haven't worked on bin/psql code; 
    >>> aren't these auto tested?  
    >> 
    >> I also couldn't find any test related to psql's PROMPT*. Perhaps Jelte
    >> knows more about it?
    > 
    > 
    > Doesn’t look like it though; 
    > e.g. this https://github.com/Florents-Tselai/postgres/commit/79fad725aa410d6c631d4ffe0f4120837f9b478c
    > didn’t break anything - on Cirrus at least
    
    EDIT: There are test under `src/psql/t` , not sure though how much coverage they have,
    but most importantly how it’d look like for this case.