I have isolated the problem.

The following gives an error

drop function testing();
CREATE FUNCTION testing()
  RETURNS text
AS $$
import ctypes
try:
    ctypes.windll.LoadLibrary("D:\\jcc.dll")
except:
    import traceback
    plpy.error(traceback.format_exc())
return ''
$$ LANGUAGE plpythonu;
select testing();

The following does not:

Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> ctypes.windll.LoadLibrary("D:\\jcc.dll")
<WinDLL 'D:\jcc.dll', handle 410000 at 1d9cb10>
>>>

It has something to do with Postgres. I am asking them on their IRC channel.

On Tue, Nov 8, 2011 at 5:05 PM, Jiang Fung Wong
<jiangfung.w...@jamiq.com> wrote:
> On Tue, Nov 8, 2011 at 4:20 PM, Andi Vajda <va...@apache.org> wrote:
>>
>> On Nov 8, 2011, at 0:08, Jiang Fung Wong <jiangfung.w...@jamiq.com> wrote:
>>
>>> I have added the directory containing jcc.dll, which is the jcc egg,
>>> to PATH. It is not necessary, because the code in jcc\__init__.py
>>> automatically adds the directory to PATH. Anyway I have added it, and
>>> the result is the same.
>>
>> Then it could be that a DLL that _jcc.dll depends on was not found or could 
>> not otherwise be loaded.
>>
>> Is there a Java VM embedded in the Postgres process ? If so, is it the same 
>> that was used to build PyLucene ?
>>
>> Andi..
>>
>
> I don't see how it turns out this way. Because I am able to use
> pyLucene on the python interpretor outside postgres.
> Theoretically they share the same system PATH environment variable, so
> both of them should import without problem, or both of them have the
> same problem. Is there a way I can do some debugging?
>
> There is no JavaVM embedded in postgres.
>
> -JF
>
>>>
>>> I couldn't not import lucene module, so there is way to run initVM().
>>>
>>> I can run pyLucene in Python 2.6.4, and the postgres' python is also 2.6.4
>>>
>>> On Tue, Nov 8, 2011 at 2:57 PM, Andi Vajda <va...@apache.org> wrote:
>>>>
>>>> On Nov 7, 2011, at 22:28, Jiang Fung Wong <jiangfung.w...@jamiq.com> wrote:
>>>>
>>>>> Dear All,
>>>>>
>>>>> I got this error when trying to import pylucene inside Postgres PL/Python.
>>>>>
>>>>> ERROR:  ('Traceback (most recent call last):
>>>>>  File "<string>", line 17, in __plpython_procedure_testing_1517611
>>>>>  File 
>>>>> "d:\\ve\\Lib\\site-packages\\lucene-3.4.0-py2.6-win32.egg\\lucene\\__init__.py",
>>>>> line 5, in <module>
>>>>>    import jcc, _lucene
>>>>>  File 
>>>>> "d:\\ve\\Lib\\site-packages\\jcc-2.11-py2.6-win32.egg\\jcc\\__init__.py",
>>>>> line 34, in <module>
>>>>>    from _jcc import initVM
>>>>> ImportError: DLL load failed: The specified module could not be found.
>>>>> ',)
>>>>>
>>>>> I have no isue importing jvm.dll using ctypes, 
>>>>> ctypes.windll.LoadLibrary("jvm")
>>>>> The path to jvm.dll is also listed on the PATH environment variable,
>>>>> from the output of the statement plpy.info(os.environ['Path']) below.
>>>>> I have no problem importing pylucene on my system's python
>>>>> interpretor, outside Postgres.
>>>>>
>>>>> How to solve this?
>>>>
>>>> You probably need to set some PATH environment variable to contain the 
>>>> directory that contains the _jcc.dll for the process Postgres is running 
>>>> in.
>>>> A Postgres windows user mailing list may have more details for you.
>>>> Don't forget that you also must run initVM() from the process' main thread 
>>>> and that each thread calling into PyLucene must call attachCurrentThread() 
>>>> too.
>>>>
>>>> Last but not least, is the version of Python embedded in Postgres the same 
>>>> as the one you used to build PyLucene ?
>>>>
>>>> Andi..
>>>>
>>>>>
>>>>> Here's my code:
>>>>>
>>>>> drop function testing();
>>>>> CREATE FUNCTION testing()
>>>>>  RETURNS text
>>>>> AS $$
>>>>>
>>>>> import os
>>>>> import ctypes
>>>>> ctypes.windll.LoadLibrary("jvm")
>>>>> plpy.info(os.environ['Path'])
>>>>>
>>>>> try:
>>>>>    import lucene
>>>>> except Exception, e:
>>>>>    import traceback
>>>>>    plpy.error(traceback.format_exc())
>>>>> else:
>>>>>    return ""
>>>>>
>>>>> $$ LANGUAGE plpythonu;
>>>>
>>
>

Reply via email to