Обсуждение: Using user mapping OID as hash key for connection hash
Hi All,
As discussed in postgres_fdw join pushdown thread [1], for two different effective local users which use public user mapping we will be creating two different connections to the foreign server with the same credentials.1. pg_fdw_concache.patch.short - shorter version of the fix. Right now ForeignTable, ForeignServer have corresponding OIDs saved in these structures. But UserMapping doesn't. Patch adds user mapping OID as a member to this structure. This member is then used as key in GetConnection().
2. pg_fdw_concache.patch.large - most of the callers of GetConnection() get ForeignServer object just to pass it to GetConnection(). GetConnection can obtain ForeignServer by using serverid from UserMapping and doesn't need ForeignServer to be an argument. Larger version of patch has this change.
GetConnection has named the UserMapping argument as just "user", ideally it should have been named user_mapping. But that seems to be too obvious to be unintentional. So, I have left that change.
[1] http://www.postgresql.org/message-id/CAFjFpRf-LiD5bai4D6cSUseJh=xxJqipo_vN8mTnZG16TMWJ-w@mail.gmail.com
[2] http://www.postgresql.org/message-id/CA+TgmoYMMv_Du-VPpQ1d7UfSjaOPBQ+LgpxTChnuQfOBjg2phg@mail.gmail.com
--
[2] http://www.postgresql.org/message-id/CA+TgmoYMMv_Du-VPpQ1d7UfSjaOPBQ+LgpxTChnuQfOBjg2phg@mail.gmail.com
--
Best Wishes,
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company
Вложения
On Wed, Jan 27, 2016 at 6:32 AM, Ashutosh Bapat <ashutosh.bapat@enterprisedb.com> wrote: > As discussed in postgres_fdw join pushdown thread [1], for two different > effective local users which use public user mapping we will be creating two > different connections to the foreign server with the same credentials. > > Robert suggested [2] that we should use user mapping OID as the connection > cache key instead of current userid and serverid. > > There are two patches attached here: > 1. pg_fdw_concache.patch.short - shorter version of the fix. Right now > ForeignTable, ForeignServer have corresponding OIDs saved in these > structures. But UserMapping doesn't. Patch adds user mapping OID as a member > to this structure. This member is then used as key in GetConnection(). > 2. pg_fdw_concache.patch.large - most of the callers of GetConnection() get > ForeignServer object just to pass it to GetConnection(). GetConnection can > obtain ForeignServer by using serverid from UserMapping and doesn't need > ForeignServer to be an argument. Larger version of patch has this change. The long form seems like a good idea, so I committed that one. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company