Обсуждение: Refreshing materialized views

Поиск
Список
Период
Сортировка

Refreshing materialized views

От
Henrik Uggla
Дата:
Hi

I created some materialized views and set a group as owner. My problem is that I can't refresh the views. I get
"permissiondenied" even when using the postgres super user. If I change the owner to an ordinary user I still can't
refreshthe view as the owner or postgres. Only if I change owner to postgres am I able to refresh the view, but only as
thepostgres user. I've mainly tried with Pgadmin4 but also a few times with psql, and the database is installed as a
dockercontainer. Please help. 

cheers
HU

Re: Refreshing materialized views

От
Tom Lane
Дата:
Henrik Uggla <Henrik.Uggla@kristianstad.se> writes:
> I created some materialized views and set a group as owner. My problem is that I can't refresh the views. I get
"permissiondenied" even when using the postgres super user. If I change the owner to an ordinary user I still can't
refreshthe view as the owner or postgres. Only if I change owner to postgres am I able to refresh the view, but only as
thepostgres user. I've mainly tried with Pgadmin4 but also a few times with psql, and the database is installed as a
dockercontainer. Please help. 

Apparently, the view owner lacks select permission on some underlying
table.  Pay attention to what is being denied access to.
        regards, tom lane


SV: Refreshing materialized views

От
Henrik Uggla
Дата:
The underlying tables are foreign tables. The user has been mapped to a foreign user with select permission. I have no
problemselecting from the foreign tables or the materialized views. 

This is the error in the log (not very useful):
2017-11-28 13:58:03.207 UTC [347] STATEMENT:  REFRESH MATERIALIZED VIEW kust_havsplan.fornlamning_linje WITH DATA;
2017-11-28 13:58:47.412 UTC [296] ERROR:  permission denied for relation fornlamning_linje

Regards
Henrik
________________________________________
Från: Tom Lane <tgl@sss.pgh.pa.us>
Skickat: den 28 november 2017 15:25:47
Till: Henrik Uggla
Kopia: pgsql-general@lists.postgresql.org
Ämne: Re: Refreshing materialized views

Henrik Uggla <Henrik.Uggla@kristianstad.se> writes:
> I created some materialized views and set a group as owner. My problem is that I can't refresh the views. I get
"permissiondenied" even when using the postgres super user. If I change the owner to an ordinary user I still can't
refreshthe view as the owner or postgres. Only if I change owner to postgres am I able to refresh the view, but only as
thepostgres user. I've mainly tried with Pgadmin4 but also a few times with psql, and the database is installed as a
dockercontainer. Please help. 

Apparently, the view owner lacks select permission on some underlying
table.  Pay attention to what is being denied access to.
                       regards, tom lane



Re: SV: Refreshing materialized views

От
Tom Lane
Дата:
Henrik Uggla <Henrik.Uggla@kristianstad.se> writes:
> The underlying tables are foreign tables. The user has been mapped to a foreign user with select permission. I have
noproblem selecting from the foreign tables or the materialized views. 

[ shrug... ] WFM; if I can select from the foreign table then I can make
a materialized view that selects from it, and that refreshes without
complaint.  Admittedly, getting things set up to select from the foreign
table is trickier than it sounds: your local user needs SELECT on the
foreign table plus a mapping to some remote userid, and *on the remote
server* that remote userid needs SELECT on whatever the foreign table
is referencing.  I'm guessing you messed up one of these components.
        regards, tom lane


Re: SV: Refreshing materialized views

От
Daevor The Devoted
Дата:
On 28 Nov 2017 5:18 pm, "Tom Lane" wrote: Henrik Uggla writes: > The underlying tables are foreign tables. The user has been mapped to a foreign user with select permission. I have no problem selecting from the foreign tables or the materialized views. [ shrug... ] WFM; if I can select from the foreign table then I can make a materialized view that selects from it, and that refreshes without complaint. Admittedly, getting things set up to select from the foreign table is trickier than it sounds: your local user needs SELECT on the foreign table plus a mapping to some remote userid, and *on the remote server* that remote userid needs SELECT on whatever the foreign table is referencing. I'm guessing you messed up one of these components. regards, tom lane Hendrik, perhaps an easy way to check out Tom's suggestion is to create a very simple materialized view that selects just from one of the foreign tables, then attempt the REFRESH. If that works, then keep adding more tables from your original materialized view until you have found the problem. Basically, reduce the problem to the simplest case, and if that works, then keep adding to it until you hit the problem. You may still not know why the problem is happening, but you'll at least know where to focus any further investigation. Kind regards, Daevor, The Devoted

Re: SV: Refreshing materialized views

От
Ben Primrose
Дата:
It may be simpler to just run the query from the materialized view definition as the user that you want to refresh the mv. On Tue, Nov 28, 2017 at 10:30 PM, Daevor The Devoted wrote: > > > On 28 Nov 2017 5:18 pm, "Tom Lane" wrote: > > Henrik Uggla writes: > > The underlying tables are foreign tables. The user has been mapped to a > foreign user with select permission. I have no problem selecting from the > foreign tables or the materialized views. > > [ shrug... ] WFM; if I can select from the foreign table then I can make > a materialized view that selects from it, and that refreshes without > complaint. Admittedly, getting things set up to select from the foreign > table is trickier than it sounds: your local user needs SELECT on the > foreign table plus a mapping to some remote userid, and *on the remote > server* that remote userid needs SELECT on whatever the foreign table > is referencing. I'm guessing you messed up one of these components. > > regards, tom lane > > Hendrik, perhaps an easy way to check out Tom's suggestion is to create a > very simple materialized view that selects just from one of the foreign > tables, then attempt the REFRESH. If that works, then keep adding more > tables from your original materialized view until you have found the > problem. > Basically, reduce the problem to the simplest case, and if that works, > then keep adding to it until you hit the problem. You may still not know > why the problem is happening, but you'll at least know where to focus any > further investigation. > > Kind regards, > Daevor, The Devoted > -- *Ben Primrose | Postgres DBA | TraceLink Inc.*400 Riverpark Dr. Floor 2, Suite 200 North Reading, MA 01864 o: +1.978.396.6507 e: bprimrose@tracelink.com

SV: SV: Refreshing materialized views

От
Henrik Uggla
Дата:
I finally managed to sort out all needed permissions and mappings.
Thanks for all replies!

cheers
Henrik
________________________________________
Från: Ben Primrose <bprimrose@tracelink.com>
Skickat: den 29 november 2017 12:42:56
Till: Daevor The Devoted
Kopia: hendrik.uggla@kristianstad.se; pgsql-general@lists.postgresql.org
Ämne: Re: SV: Refreshing materialized views

It may be simpler to just run the query from the materialized view definition as the user that you want to refresh the
mv.

On Tue, Nov 28, 2017 at 10:30 PM, Daevor The Devoted <dollien@gmail.com<mailto:dollien@gmail.com>> wrote:


On 28 Nov 2017 5:18 pm, "Tom Lane" <tgl@sss.pgh.pa.us<mailto:tgl@sss.pgh.pa.us>> wrote:
Henrik Uggla <Henrik.Uggla@kristianstad.se<mailto:Henrik.Uggla@kristianstad.se>> writes:
> The underlying tables are foreign tables. The user has been mapped to a foreign user with select permission. I have
noproblem selecting from the foreign tables or the materialized views. 

[ shrug... ] WFM; if I can select from the foreign table then I can make
a materialized view that selects from it, and that refreshes without
complaint.  Admittedly, getting things set up to select from the foreign
table is trickier than it sounds: your local user needs SELECT on the
foreign table plus a mapping to some remote userid, and *on the remote
server* that remote userid needs SELECT on whatever the foreign table
is referencing.  I'm guessing you messed up one of these components.
                       regards, tom lane

Hendrik, perhaps an easy way to check out Tom's suggestion is to create a very simple materialized view that selects
justfrom one of the foreign tables, then attempt the REFRESH. If that works, then keep adding more tables from your
originalmaterialized view until you have found the problem. 
Basically, reduce the problem to the simplest case, and if that works, then keep adding to it until you hit the
problem.You may still not know why the problem is happening, but you'll at least know where to focus any further
investigation.

Kind regards,
Daevor, The Devoted



--

Ben Primrose  |  Postgres DBA |  TraceLink Inc.
400 Riverpark Dr.
Floor 2, Suite 200
North Reading, MA 01864
o: +1.978.396.6507
e: bprimrose@tracelink.com<mailto:bprimrose@tracelink.com>