Hi,

In my efforts to allow PostgreSQL users to be able to fully use the
server even when not granted file system level access to it, came the
question of PL "lib" code management.

Where do you manage the "library" code you need, those parts of your
code that are not exposed at the SQL level?

For example when doing plpython you still need to install files on the
server's file system each time you want to be able to "import package"
from your Stored Procedures.

The Python community seems to have finally solved that problem and now
offers a facility (called wheel) comparable to Java .jar files, see
details at https://pypi.python.org/pypi/wheel. I don't know about the
Perl and TCL communities.

When thinking about a way to benefit from those facilities in our PL
infrastructure, we would need to be able to upload an "archive" file in
a suitable format and I guess register per-PL handlers for those
archives: storage and loading has to be considered.

  CREATE ARCHIVE schema.name
    LANGUAGE plpythonu
  AS $$
    binary blob here, maybe base64 encoded, PL dependent
  $$;

The standard saith that in the case of PL/Java a spefific function's
classpath is composed of all those JAR archives that you've been
registering against the same schema as where you put the function in.

If we choose to follow that model then any function created in the same
schema and language as any given archive is going to be able to "import"
things from it: the archive will be LOADed (whatever that means in your
PL of choice) when the function is "compiled" and "used".


Now, uploading a binary file and storing it in $PGDATA looks a lot like
what we're still talking about for the DSO modules bits. So here's
another way to think about it, where we don't need any language feature:

  CREATE ARCHIVE schema.name
        LANGUAGE plpythonu
   WITH 'path/to/component.py' AS $$ … $$,
        'path/to/__init__.py'  AS $$ … $$,
        …;

That would just upload given text/plain contents on the file system and
arrange for the language runtime to be able to use it. For python that
means tweaking PYTHONPATH.

Regards,
-- 
Dimitri Fontaine
http://2ndQuadrant.fr     PostgreSQL : Expertise, Formation et Support


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to