Re: Feature: psql - display current search_path in prompt - Mailing list pgsql-hackers
From | Florents Tselai |
---|---|
Subject | Re: Feature: psql - display current search_path in prompt |
Date | |
Msg-id | 6DF8F032-50CD-416C-8784-C669C79BA165@gmail.com Whole thread Raw |
In response to | Re: Feature: psql - display current search_path in prompt (Florents Tselai <florents.tselai@gmail.com>) |
Responses |
Re: Feature: psql - display current search_path in prompt
|
List | pgsql-hackers |
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/79fad725aa410d6c631d4ffe0f4120837f9b478cdidn’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.
pgsql-hackers by date: