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