pl/R problem

Started by Don Isgittover 19 years ago11 messagesgeneral
Jump to latest
#1Don Isgitt
djisgitt@soundenergy.com

Hi list,

Information first:

gds2=# select version();

version

----------------------------------------------------------------------------------------------------------
PostgreSQL 8.1.4 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.2.3
20030502 (Red Hat Linux 3.2.3-20)
(1 row)

pl/R 0.6.2

R.2.3 (compiled from source)

R_HOME is defined (before starting postmaster)

gds2=# select * from pg_language;
lanname | lanispl | lanpltrusted | lanplcallfoid | lanvalidator | lanacl
-----------+---------+--------------+---------------+--------------+--------
internal | f | f | 0 | 2246 |
c | f | f | 0 | 2247 |
sql | f | t | 0 | 2248 |
plpgsql | t | t | 16393 | 16394 |
plperl | t | t | 18064 | 18065 |
plpythonu | t | f | 18067 | 0 |
plperlu | t | f | 18064 | 18065 |
plr | t | f | 24576 | 0 |

Now, for the problem:

gds2=# create function sd(_float8) returns float as '' language 'plr';
CREATE FUNCTION

gds2=# select round(sd('{1.23,1.31,1.42,1.27}'::_float8)::numeric,8);
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

Relevant server log piece:

cannot find system Renviron
Fatal error: unable to open the base package

LOG: server process (PID 6792) exited with exit code 2

So, the question: what am I missing that enables it to find the "Renviron"

Thank you.

Don

#2Michael Fuhr
mike@fuhr.org
In reply to: Don Isgitt (#1)
Re: pl/R problem

On Tue, Aug 22, 2006 at 04:24:46PM -0500, Don Isgitt wrote:

gds2=# create function sd(_float8) returns float as '' language 'plr';
CREATE FUNCTION

gds2=# select round(sd('{1.23,1.31,1.42,1.27}'::_float8)::numeric,8);
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

Relevant server log piece:

cannot find system Renviron
Fatal error: unable to open the base package

LOG: server process (PID 6792) exited with exit code 2

I can reproduce this on Solaris 9 with PL/R 0.6.2-alpha and R 2.2.1
if I rename $R_HOME/etc/Renviron to something else. I don't get
the "unable to open the base package" error but I do get "cannot
find system Renviron" and several other errors like "Error in
options(...) : invalid editor parameter" followed by a segmentation
fault.

So, the question: what am I missing that enables it to find the "Renviron"

Does the file $R_HOME/etc/Renviron or $R_HOME/etc/<architecture>/Renviron
exist and have permissions such that the PostgreSQL server can read
it? The error "cannot find system Renviron" comes from the R
function process_system_Renviron() in src/main/Renviron.c in response
to process_Renviron() returning 0, which it does if its filename
argument is NULL or if it can't open that file.

--
Michael Fuhr

#3Don Isgitt
djisgitt@soundenergy.com
In reply to: Michael Fuhr (#2)
Re: pl/R problem

Michael Fuhr wrote:

On Tue, Aug 22, 2006 at 04:24:46PM -0500, Don Isgitt wrote:

gds2=# create function sd(_float8) returns float as '' language 'plr';
CREATE FUNCTION

gds2=# select round(sd('{1.23,1.31,1.42,1.27}'::_float8)::numeric,8);
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

Relevant server log piece:

cannot find system Renviron
Fatal error: unable to open the base package

LOG: server process (PID 6792) exited with exit code 2

I can reproduce this on Solaris 9 with PL/R 0.6.2-alpha and R 2.2.1
if I rename $R_HOME/etc/Renviron to something else. I don't get
the "unable to open the base package" error but I do get "cannot
find system Renviron" and several other errors like "Error in
options(...) : invalid editor parameter" followed by a segmentation
fault.

So, the question: what am I missing that enables it to find the "Renviron"

Does the file $R_HOME/etc/Renviron or $R_HOME/etc/<architecture>/Renviron
exist and have permissions such that the PostgreSQL server can read
it? The error "cannot find system Renviron" comes from the R
function process_system_Renviron() in src/main/Renviron.c in response
to process_Renviron() returning 0, which it does if its filename
argument is NULL or if it can't open that file.

Hi Michael,

Thanks for the reply and the research. The relevant file is

[djisgitt@prs1 R-2.3.0]$ ls -l $R_HOME/etc/Renviron
-rw-rw-r-- 1 djisgitt djisgitt 1151 Jun 1 11:42
/home/djisgitt/R-2.3.0/etc/Renviron

so I don't see that as the problem.

I use R quite a lot, so I know the installation of R itself is good, but
this is the first time I have tried pl/R. Also, pgsql works, so I assume
there is something incorrect between pgsql and R. I just don't know what!

If you have any more suggestions, or need more information, let me know.

Don

#4Joe Conway
mail@joeconway.com
In reply to: Don Isgitt (#3)
Re: pl/R problem

Don Isgitt wrote:

Thanks for the reply and the research. The relevant file is

[djisgitt@prs1 R-2.3.0]$ ls -l $R_HOME/etc/Renviron
-rw-rw-r-- 1 djisgitt djisgitt 1151 Jun 1 11:42
/home/djisgitt/R-2.3.0/etc/Renviron

so I don't see that as the problem.

I use R quite a lot, so I know the installation of R itself is good, but
this is the first time I have tried pl/R. Also, pgsql works, so I assume
there is something incorrect between pgsql and R. I just don't know what!

If you have any more suggestions, or need more information, let me know.

I just got back from a business trip, and am trying to get caught up --
give me a few days and I'll see if I can help (i.e. I should be able to
find time on the weekend)...

Joe

#5Michael Fuhr
mike@fuhr.org
In reply to: Don Isgitt (#3)
Re: pl/R problem

On Wed, Aug 23, 2006 at 08:38:01AM -0500, Don Isgitt wrote:

Thanks for the reply and the research. The relevant file is

[djisgitt@prs1 R-2.3.0]$ ls -l $R_HOME/etc/Renviron
-rw-rw-r-- 1 djisgitt djisgitt 1151 Jun 1 11:42
/home/djisgitt/R-2.3.0/etc/Renviron

so I don't see that as the problem.

Have you checked the permissions on all of the directories in the
file's path? Have you verified that PostgreSQL is using the same
$R_HOME? You can check the environment with plr_environ():

SELECT * FROM plr_environ() ORDER BY name;

--
Michael Fuhr

#6Don Isgitt
djisgitt@soundenergy.com
In reply to: Don Isgitt (#1)
Re: pl/R problem

Adam Witney wrote:

Don Isgitt wrote:

Michael Fuhr wrote:

On Tue, Aug 22, 2006 at 04:24:46PM -0500, Don Isgitt wrote:

gds2=# create function sd(_float8) returns float as '' language 'plr';
CREATE FUNCTION

gds2=# select round(sd('{1.23,1.31,1.42,1.27}'::_float8)::numeric,8);
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

Relevant server log piece:

cannot find system Renviron
Fatal error: unable to open the base package

LOG: server process (PID 6792) exited with exit code 2

I can reproduce this on Solaris 9 with PL/R 0.6.2-alpha and R 2.2.1
if I rename $R_HOME/etc/Renviron to something else. I don't get
the "unable to open the base package" error but I do get "cannot
find system Renviron" and several other errors like "Error in
options(...) : invalid editor parameter" followed by a segmentation
fault.

So, the question: what am I missing that enables it to find the
"Renviron"

Does the file $R_HOME/etc/Renviron or $R_HOME/etc/<architecture>/Renviron
exist and have permissions such that the PostgreSQL server can read
it? The error "cannot find system Renviron" comes from the R
function process_system_Renviron() in src/main/Renviron.c in response
to process_Renviron() returning 0, which it does if its filename
argument is NULL or if it can't open that file.

Hi Michael,

Thanks for the reply and the research. The relevant file is

[djisgitt@prs1 R-2.3.0]$ ls -l $R_HOME/etc/Renviron
-rw-rw-r-- 1 djisgitt djisgitt 1151 Jun 1 11:42
/home/djisgitt/R-2.3.0/etc/Renviron

so I don't see that as the problem.

I use R quite a lot, so I know the installation of R itself is good, but
this is the first time I have tried pl/R. Also, pgsql works, so I assume
there is something incorrect between pgsql and R. I just don't know what!

If you have any more suggestions, or need more information, let me know.

Hi Don,

your functions work fine on my linux system. Just wondering, could the
fact that your R_HOME is installed under your home directory be causing
the problem? Postgesql will be running as a different user...

adam

Hi Adam,

Thanks for checking that. There is world read access to R_HOME, so I
hope that is sufficient.

Don

#7Don Isgitt
djisgitt@soundenergy.com
In reply to: Michael Fuhr (#5)
Re: pl/R problem

Michael Fuhr wrote:

On Wed, Aug 23, 2006 at 08:38:01AM -0500, Don Isgitt wrote:

Thanks for the reply and the research. The relevant file is

[djisgitt@prs1 R-2.3.0]$ ls -l $R_HOME/etc/Renviron
-rw-rw-r-- 1 djisgitt djisgitt 1151 Jun 1 11:42
/home/djisgitt/R-2.3.0/etc/Renviron

so I don't see that as the problem.

Have you checked the permissions on all of the directories in the
file's path? Have you verified that PostgreSQL is using the same
$R_HOME? You can check the environment with plr_environ():

Yes. At least world read all the way.
gds2=# select * from plr_environ() order by name;
R_HOME | /home/djisgitt/R-2.3.0

SELECT * FROM plr_environ() ORDER BY name;

Thank you, Michael. I appreciate your help.

Don

#8Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Don Isgitt (#7)
Re: pl/R problem

Don Isgitt wrote:

Michael Fuhr wrote:

On Wed, Aug 23, 2006 at 08:38:01AM -0500, Don Isgitt wrote:

Thanks for the reply and the research. The relevant file is

[djisgitt@prs1 R-2.3.0]$ ls -l $R_HOME/etc/Renviron
-rw-rw-r-- 1 djisgitt djisgitt 1151 Jun 1 11:42
/home/djisgitt/R-2.3.0/etc/Renviron

so I don't see that as the problem.

Have you checked the permissions on all of the directories in the
file's path? Have you verified that PostgreSQL is using the same
$R_HOME? You can check the environment with plr_environ():

Yes. At least world read all the way.

The best way to make sure this is the case I've found is

su - postgres
stat /home/djisgitt/R-2.3.0/etc/Renviron
(or ls, whatever)

I've seen people swearing they have world access all the way and then
noticing they are missing a little bit somewhere.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

#9Michael Fuhr
mike@fuhr.org
In reply to: Don Isgitt (#7)
Re: pl/R problem

On Wed, Aug 23, 2006 at 09:37:17AM -0500, Don Isgitt wrote:

Michael Fuhr wrote:

Have you checked the permissions on all of the directories in the
file's path? Have you verified that PostgreSQL is using the same
$R_HOME? You can check the environment with plr_environ():

Yes. At least world read all the way.

Just readable or also executable? What's the output of the following?

ls -ld /home/djisgitt/R-2.3.0/etc /home/djisgitt/R-2.3.0 /home/djisgitt /home

--
Michael Fuhr

#10Don Isgitt
djisgitt@soundenergy.com
In reply to: Alvaro Herrera (#8)
Re: pl/R problem

Alvaro Herrera wrote:

Don Isgitt wrote:

Michael Fuhr wrote:

On Wed, Aug 23, 2006 at 08:38:01AM -0500, Don Isgitt wrote:

Thanks for the reply and the research. The relevant file is

[djisgitt@prs1 R-2.3.0]$ ls -l $R_HOME/etc/Renviron
-rw-rw-r-- 1 djisgitt djisgitt 1151 Jun 1 11:42
/home/djisgitt/R-2.3.0/etc/Renviron

so I don't see that as the problem.

Have you checked the permissions on all of the directories in the
file's path? Have you verified that PostgreSQL is using the same
$R_HOME? You can check the environment with plr_environ():

Yes. At least world read all the way.

The best way to make sure this is the case I've found is

su - postgres
stat /home/djisgitt/R-2.3.0/etc/Renviron
(or ls, whatever)

I've seen people swearing they have world access all the way and then
noticing they are missing a little bit somewhere.

Quite so, Alvaro & Michael. Yes, world read as I said, but missing
execute at one level. Sorry for my carelessness. It works as expected now.

Thank you,

Don

#11Joe Conway
mail@joeconway.com
In reply to: Don Isgitt (#10)
Re: pl/R problem

Don Isgitt wrote:

Quite so, Alvaro & Michael. Yes, world read as I said, but missing
execute at one level. Sorry for my carelessness. It works as expected now.

Ah, good to know. I'll add myself a todo to eliminate the crash in this
scenario. I will include a fix in the next release, which will probably
be sometime after postgres 8.2 beta starts.

Joe