Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc6eac71

Browse files
committed
Fix psql's \connect command some more.
Jasen Betts reported yet another unintended side effect of commit85c5428: reconnecting with "\c service=whatever" did not have theexpected results. The reason is that starting from the output ofPQconndefaults() effectively allows environment variables (suchas PGPORT) to override entries in the service file, whereas thenormal priority is the other way around.Not using PQconndefaults at all would require yet a third main codepath in do_connect's parameter setup, so I don't really want to fixit that way. But we can have the logic effectively ignore all thedefault values for just a couple more lines of code.This patch doesn't change the behavior for "\c -reuse-previous=onservice=whatever". That remains significantly different from before85c5428, because many more parameters will be re-used, and thusnot be possible for service entries to replace. But I think thisis (mostly?) intentional. In any case, since libpq does not reportwhere it got parameter values from, it's hard to do differently.Per bug #16936 from Jasen Betts. As with the previous patches,back-patch to all supported branches. (9.5 is unfortunately nowout of support, so this won't get fixed there.)Discussion:https://postgr.es/m/16936-3f524322a53a29f0@postgresql.org
1 parentd4791ac commitc6eac71

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

‎src/bin/psql/command.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3143,6 +3143,25 @@ do_connect(enum trivalue reuse_previous_specification,
31433143
if (strcmp(replci->keyword,"password")==0)
31443144
have_password= true;
31453145
}
3146+
elseif (!reuse_previous)
3147+
{
3148+
/*
3149+
* When we have a connstring and are not re-using
3150+
* parameters, swap *all* entries, even those not set
3151+
* by the connstring. This avoids absorbing
3152+
* environment-dependent defaults from the result of
3153+
* PQconndefaults(). We don't want to do that because
3154+
* they'd override service-file entries if the
3155+
* connstring specifies a service parameter, whereas
3156+
* the priority should be the other way around. libpq
3157+
* can certainly recompute any defaults we don't pass
3158+
* here. (In this situation, it's a bit wasteful to
3159+
* have called PQconndefaults() at all, but not doing
3160+
* so would require yet another major code path here.)
3161+
*/
3162+
replci->val=ci->val;
3163+
ci->val=NULL;
3164+
}
31463165
}
31473166
Assert(ci->keyword==NULL&&replci->keyword==NULL);
31483167

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp