On Jun 23, 2009, at 2:06 PM, Dimitri Fontaine wrote:

It'd be nice if it supported other core languages like PL/Perl, but it's okay if it doesn't on the first round (I'd likely want to use some CPAN modules in a PL/Perl extension, anyway).

At first sight I though you were talking about a non-issue, as I meant that an extension should not have to be a .so (or dll) + a .sql exposing it, but any SQL code PostgreSQL is able to understand, plperl included.

Well, C code with /[.](?:so|dll|dylib)/ should be allowed as well.

But plpgsql and plperl are not available by default on databases, so it makes sense to rise the question, and the right answer might be to expose some (optional?) core components as extensions (version is PG major version), in order for out-of-core extensions to be able to depend on them being there.

Yes, and it could also be that a particular extension requires an unsafe version of a PL. That would need to be included in the metadata for the PL extension.

PL/pgSQL should be in core and enabled by default, IMHO. The other PLs should be extensions.

I've been told pljava is complex in that it requires a part of pljave to be there in order to be installable (like pseudo DDL coded in pljava and needed in the installation procedure). So I'd prefer not to go this far, just in case.

Well, if each PL aside from SQL, C, and PL/pgSQL is an extension, then it's just a dependency, right?

In fact supporting custom classes GUCs seems to be part of what Tom Dunstan did, so it should be ok to plan to have it?
 
http://archives.postgresql.org/message-id/ca33c0a30804061349s41b4d8fcsa9c579454b27e...@mail.gmail.com

Ah, cool.

In fact PostGIS is a complex beast, in that it's registering typmod like information about user columns into its own private tables (think extension's catalog). Now that means circular dependancy of some sort as restoring user data requires to have the PostGIS private tables filled already, but as they refer user data (not sure if it's targeting user tables ---DDL--- only), you have to already have restored them.

Ouch. Must be a nightmare today, too.

Even if it's only targeting schema level stuff, you'd need to restore the extension's data after the schema but before the data, but the extension's itself (data types, indexes opclass, etc) BEFORE the data.

I'm not sure you should target to support this level of complexity (it has to be generic) in the first incantation of it, but if some hacker tells me it's damn easy to get right with pg_depend, why not?

Yeah, we should KISS to start with.

Maybe it's just a (non native) misuse of vocabulary, I see contrib as the current incarnation of the standard extension library and would like to see it evolve into a list of reviewed and maintained extensions, which in a later step you'll be able to remotely fetch and install easily from source from postgresql.org services, or in binary from your distribution package.

Oh, yeah, I'm on board with that.

But I think we'll still need a contrib/ like suite that core hackers keep an eye on and maintain in minor branches and adapt in major releases.

This says the same thing as the last paragraph, no? I don't think I'd call such a distribution "contrib," though. Maybe standard extensions.

Now if we ever get to a point where we can setup an http repository of easily installable extensions that you can point a built-in core tool to, that means there will be the standard official one and a myriad of others (pgfoundry, and self hosting).

Yes.

None of this, stay aboard :)
Register within the database where you'll want to install it. The install step as shown below will then use the meta-data to do the sanity checking (dependancies) and the installation (what script to read?).

Oh, *that* kind of registration. Fine, of course!

It would need something to ensure an appropriate version, too, no?

So it's:
 create schema foo;
 install extension foo with version = 1.2, search_path = foo;

That's fine by me, but I'm not sure whether first extension's implementation will support installing several versions of the same extension in parallel, so I'm unsure what we get here... one more sanity check? I buy it.

Yes, although as I said before, version numbers are hard to get right. We should keep them very simple, with a strict requirement as to the simple format (perhaps /\d+[.]\d{2}/) or perhaps NUMERIC or some other core data type, and then we'd be able to use simple operators:

install extension foo with version = 1.2 OR version >= 1.4, search_path = foo;

I don't think we want to cancel user ability to choose schema where to install, so an idea could be to ask extensions author to systematically use pg_extension (or non-qualify), and PostgreSQL could replace this with the INSTALL EXTENSION command schema.

Replace what? How would pg_extension or INSTALL EXTENSION know to magically schema-qualify the function calls internal to an extension?

I like this. Then the build file contains, essentially, just a SQL command. That will make it easy for extension authors. However, they might wish to include quite a lot of other metadata for the extension, such as URLs for VC and bug tracking.

I guess it'll get easy to add those once we agree on the way to go here.

I think that people will want to be able to associate arbitrary metadata. It'd be useful for configuration, too.

Sold, with current privileges and location restrictions about file system access from within the database... does this boils down to $PGDATA subdirectory only?

Yes, probably, since the database system user will need to have permission to access them.

It'll get as complex as you need it to be, and it's only required that it's a PostgreSQL function. I guess writing the plphp upgrade function in plphp would be quite challenging, unless we're able to guarantee that the newer extension's code won't get loaded before until the fonction returned (and didn't RAISE EXCEPTION).

The upgrade function stuff is what I understand least about this proposal. Can you provide a real-world type example of how it will be used?

Thanks,

David


--
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