Arthur Reutenauer wrote:
>> One of the best parts, in my view, was Zeljko Vrba pointing out, in effect,
>> that Postgres both embedded scripting languages and provided an interface
>> that allowed it to be used as an extension to a scripting language. This
>> provides a wonderful dual example.
>> Taco and Hans already stated their opinions, and I won't speak on
> their behalf, but I read the entire thread on c.t.t. and would like to
> point out that in the discussion, Željko seems to say the exact contrary
> to what you report here: Postgres embeds Python as a scripting language
> -- just like LuaTeX embeds Lua --
Thank you for reading the c.t.t thread, Arthur, and for your comments.
Željko pointed out that Postgres allows Python to be embedded as a
scripting language. It is well-known that there are Python wrappers
that allow one to extend Python with the Postgres database engine. Put
the two together and you have the dual example.
I don't think I was being too generous in giving Željko credit for this
wonderful dual example. He certainly provided the part that was not
obvious.
> and [Postgres] does not offer the database engine
> as an extension: it only gives access to it through an API, and does not
> extend Python with a database module.
In Python I can write
import pyscopg
and then I have a module that allows me to connect to a Postgres
database, and add, change and delete records. In other words I have
imported into Python a database extension.
I'd expect almost every LAMP web-site to do something like this. Not
always Python, not always Postgres, but extend a scripting language to
provide database access.
This database will be accessed, of course, through its API. (How else
would a sensible programmer do it?) The extension module pyscopg
provides a wrapper around the API that makes it accessible to Python.
As it happens, and for good reasons, pyscopg is not provided by Postgres
but by a third party. So technically you are correct. Postgres does
not provide a Python extension module, only an API. A third party wraps
the API to provide a Python extension module.
But all this is a little off the topic of embed and extend. Postgres
can embed Python, and one can extend Python using Postgres. This is the
dual example, and it helps show us what embed is good for, and what
extend is good for.
--
Jonathan