Re: Trying to solve a SocketError [Errno 13] Permission with PL/Python in PostgreSQL 9.3

From: Marcos Ortiz <mlortiz(at)uci(dot)cu>
To: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>, pgsql-general(at)postgresql(dot)org
Subject: Re: Trying to solve a SocketError [Errno 13] Permission with PL/Python in PostgreSQL 9.3
Date: 2015-05-23 23:16:28
Message-ID: 55610A4C.3050406@uci.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 23/05/15 19:09, Adrian Klaver wrote:
> On 05/23/2015 03:51 PM, Marcos Ortiz wrote:
>>
>>
>> On 23/05/15 18:40, Adrian Klaver wrote:
>>> On 05/23/2015 03:27 PM, Marcos Ortiz wrote:
>>>> Regards to all the list.
>>>> First all the info about the system:
>>>>
>>>> O.S: CentOS 7 64 bits
>>>> PostgreSQL version:
>>>>
>>>> SELECT version();
>>>> version
>>>> --------------------------------------------------------------------------------------------------------------
>>>>
>>>>
>>>>
>>>> PostgreSQL 9.2.7 on x86_64-redhat-linux-gnu, compiled by gcc (GCC)
>>>> 4.8.2 20140120 (Red Hat 4.8.2-16), 64-bit
>>>> (1 row)
>>>>
>>>> Neo4j version: 2.1.M
>>>> Py2neo version: 2.0.8
>>>> Python version:
>>>> python
>>>> Python 2.7.5 (default, Jun 17 2014, 18:11:42)
>>>> [GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2
>>>>
>>>> Now the problem:
>>>>
>>>> We are working here to integrate PostgreSQL with Neo4j through
>>>> PL/Python
>>>> using the py2neo module for it, and when we want to send sentences to
>>>> Neo4j using port 7474, the executed code raises a SocketError
>>>> [Errno 13]
>>>> Permission denied.
>>>
>>> Well first in the code below, if I am following correctly, the socket
>>> is 37474.
>> Yes, Adrian. Sorry for that, the correct port is 7474. I just was
>> testing with higher ports to
>> see if the error persisted.
>>>
>>>
>>>>
>>>> I tested the same code in a normal python script outside of
>>>> PostgreSQL,
>>>> and it works well, but the problem is when I use the code inside
>>>> PostgreSQL with PL/Python.
>>>
>>> Second the plpythonu code is running as the postgres user, so does
>>> that user have permissions on the socket.
>> Did you mean the socket created by Neo4j's server right?
>> For that reason, I created a group in the system for this named
>> supervisor, where neo4j/postgres users are members.
>> So, if I find the socket file for Neo4j-server, changing permissions
>> could solve the problem. Right?
>
> Not sure, but a quick search found that py2neo uses the neo4j REST API
> and that API has authorization parameters:
>
> http://neo4j.com/docs/stable/security-server.html
>
> Have you gone through the above?
Yes, Adrian. py2neo installs a tool called neoauth, which can be used to
create users with their respective passwords.
For that reason, I use this way to create the graph:

graph = Graph("http://neo4j:neo4j(at)10(dot)8(dot)45(dot)136:7474/db/data")
using the user neo4j and its pass neo4j

>
>
>> Neo4j is a Java-based platform.
>>>
>>>> This is the code of a simple function to search a node in the Neo4j
>>>> graph:
>>>>
>>>> CREATE OR REPLACE FUNCTION search_professor_node(nombre_prof text)
>>>> RETURNS text AS
>>>> $BODY$
>>>> from py2neo import Graph
>>>> from py2neo.cypher import CypherTransaction
>>>>
>>>> graph = Graph("http://neo4j:neo4j(at)10(dot)8(dot)45(dot)136:37474/db/data")
>>>> tx = graph.cypher.begin()
>>>> statement = "MATCH (pf:Professor) WHERE pf.nombre = {name} RETURN
>>>> pf;" ,
>>>> tx.append(statement, parameters={'name': nombre_prof})
>>>> professor= tx.commit()
>>>> $BODY$
>>>> LANGUAGE plpythonu VOLATILE
>>>> COST 100;
>>>>
>>>> and it can be used:
>>>> SELECT search_professor_node('Max');
>>>>
>>>> The completed error is:
>>>>
>>>> ********** Error **********
>>>>
>>>> ERROR: py2neo.packages.httpstream.http.SocketError: Permission denied
>>>> SQL state: XX000
>>>> Context: Traceback (most recent call last):
>>>> PL/Python function "search_professor_node", line 6, in <module>
>>>> tx = graph.cypher.begin()
>>>> PL/Python function "search_professor_node", line 666, in cypher
>>>> PL/Python function "search_professor_node", line 212, in metadata
>>>> PL/Python function "search_professor_node", line 257, in get
>>>> PL/Python function "search_professor_node", line 965, in get
>>>> PL/Python function "search_professor_node", line 942, in
>>>> __get_or_head
>>>> PL/Python function "search_professor_node", line 432, in submit
>>>> PL/Python function "search_professor_node", line 361, in submit
>>>> PL/Python function "search_professor_node"
>>>>
>>>> Thanks a lot for your time, and I hope to find a suitable solution
>>>> for it.
>>>>
>>>>
>>>
>>>
>>
>> --
>> Marcos Ortiz <http://about.me/marcosortiz>, Sr. Product Manager (Data
>> Infrastructure) at UCI
>> @marcosluis2186 <http://twitter.com/marcosluis2186>
>>
>>
>
>

--
Marcos Ortiz <http://about.me/marcosortiz>, Sr. Product Manager (Data
Infrastructure) at UCI
@marcosluis2186 <http://twitter.com/marcosluis2186>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Adrian Klaver 2015-05-23 23:30:47 Re: Trying to solve a SocketError [Errno 13] Permission with PL/Python in PostgreSQL 9.3
Previous Message Adrian Klaver 2015-05-23 23:09:56 Re: Trying to solve a SocketError [Errno 13] Permission with PL/Python in PostgreSQL 9.3