2016-04-15 9 views
0

Ich lerne/testet PL/R für PostgreSQL (9.5) und versuchte, die Installation mit SELECT * FROM plr_environ(); zu überprüfen. Aber das funktioniert nur für den Superuser für PG, und nicht für meine normalen PG-Benutzer.So aktivieren Sie PL/R für normale Benutzer in PostgreSQL

Was ich tat, war:

1.Ich tat CREATE EXTENSION plr; als postgres in eine Template-Datenbank, und dann erstellt Datenbank für meine Benutzername mit createdb -T my_template my_user.

2.Falls psql -U postgres auf der Vorlage db verwenden, kann ich:

postgres=# SELECT * FROM plr_environ(); 
     name  |   value    
--------------------+------------------------------ 
PG_OOM_ADJUST_FILE | /proc/self/oom_score_adj 
PG_GRANDPARENT_PID | 499 
PGLOCALEDIR  | /usr/share/locale 
PGSYSCONFDIR  | /etc/postgresql-common 
LANG    | en_US.UTF-8 
PWD    | /var/lib/postgresql 
PGDATA    | /var/lib/postgresql/9.5/main 
LC_COLLATE   | en_US.UTF-8 
LC_CTYPE   | en_US.UTF-8 
LC_MESSAGES  | en_US.UTF-8 
LC_MONETARY  | C 
LC_NUMERIC   | C 
LC_TIME   | C 

Allerdings, wenn ich dies auf den neuen db aus der Vorlage erstellt, ich den Fehler bekam:

=> SELECT * FROM plr_environ(); 
ERROR: permission denied for function plr_environ 

Kann mir jemand helfen zu erklären, wie ich den Workflow beheben kann, damit PL/R für normale Benutzer funktioniert?

+0

Ich stelle mir vor, in diesem Fall sind Sie der Superuser und Sie tun Setups für andere Benutzer, also würde ich die Berechtigungen in PGDATA /var/lib/postgresql/9.5/main betrachten, die wahrscheinlich Postgres sagen: Postgres und dann werden Sie sich wahrscheinlich fragen, ob Sie Ihre anderen Benutzer in der Postgres-Zone haben möchten oder ob Sie das Template PGDATA für jeden Benutzer mit der Berechtigung user: user auf den eigenen Dateispeicherort ändern wollen. Also kein PL/R Problem an sich. – Chris

+0

@chris Ich bin nur die Datenbank su. Ich habe den gleichen Arbeitsablauf für andere Erweiterungen wie Postgis ohne ein Problem verwendet. Ich weiß nicht, was hier an plr anders ist. – tinlyx

+0

Alles ist in Ordnung, bis Sie versuchen, etwas zu tun. Select tut so etwas wie das Ändern der zugrunde liegenden Datei. Die Erstellung von Erweiterungen spricht nur die Möglichkeiten an, die innerhalb einer bestimmten Datenbank erreicht werden können. Aber wie auch immer, sagst du, dass der PGDATA-Pfad zu einer Datei führt, in der jeder etwas tun kann. Die verweigerte Berechtigung weist im Allgemeinen darauf hin, dass dies nicht der Fall ist und weder postgres noch root davon etwas haben. Was hast du in der Benutzervorlage? – Chris

Antwort

0

Das nächste, was ich finden kann, ist von this blog. Es scheint, dass nur Superuser PL/R-Funktionen ausführen können. Unter Angabe der Blog:

To execute plr functions is mandatory that the user be a superuser, because this language is considered unreliable at this moment. ...

The solution is alter user rights to this condition.

So scheint es, dass zur Zeit ist es nicht möglich für Nicht-Superuser PL zu verwenden/R-Funktionen.

Verwandte Themen