Re: Package support for Postgres - Mailing list pgsql-hackers

From Peter Eisentraut
Subject Re: Package support for Postgres
Date
Msg-id Pine.LNX.4.30.0110172033570.628-100000@peter.localdomain
Whole thread Raw
In response to Re: Package support for Postgres  (Bill Studenmund <wrstuden@netbsd.org>)
Responses Re: Package support for Postgres
List pgsql-hackers
Bill Studenmund writes:

> Yes, I want a namespace below schemas.
>
> The difference between packages and schemas is that schemas encapsulate
> everything. As Tom pointed out, that includes types (and I'd assume
> operators too). Packages do not encapsulate types and operators.

Of course nobody is forcing you to put types into subschemas.  But the
user would have the freedom to spread things around as he sees fit.

> > > I agree that some PLs might do things their own way and so package
> > > variables won't be as useful. If these variables are not appropriate to a
> > > PL, it can ignore them.
> > >
> > > PL/pgSQL is a counter-example, though, showing that something needs to be
> > > done.
> >
> > Then PL/pgSQL should be fixed.  But that doesn't need a such a large
>
> Why is PL/pgSQL broken?

Maybe read "fixed" as "enhanced".

> The problem is not creating persistent storage; the issue is that the
> langyage was designed to not use it. What you're proposing could be done,
> but would effectivly be shoving the change in with a hammer. Also, any
> other PLs which are based on languages with strict namespaces will have
> the same problem.

Other PLs have shown that storing global data in a language-typical way
*is* possible.  I read your argumentation as "PL/pgSQL is not designed to
have global variables, so I'm going to implement 'packages' as a way to
make some anyway".  Either PL/pgSQL is not designed for it, then there
should not be any -- at all.  Or it can handle them after all, but then
it's the business of the language handler to deal with it.

> Look at C for instance. What you're describing is the equivalent to
> letting a function or procedure in C declare global variables. That's not
> now the language works, and no one seems to mind. :-)

What you're describing is the equivalent of declaring global variables in
C but inventing a whole new mechanism in the operating system for it
called "package" (which also happens to be a namespace mechanism as a
second job).  Now, there are ways to exchange data between separate
programs or modules in C, such as message queues or shared memory.  (If
you think about it, what PL/Python is doing with its global dictionary is
just the same as shared memory.)  This works fine, but it doesn't affect
PostgreSQL proper in any way.

So, do something with PL/pgSQL.  Implement a global dictionary, or shared
memory, or some other way to share data between functions.  Call it
"package" if you like.  (Java has packages which are somewhat like that.)

> My concern with that is that then we have to make sure to dump it in the
> same order you entered it.

pg_dump can do dependency ordering if you ask it nicely. ;-)  When we
implement schemas we'll have to make sure it works anyway.  Thinking about
pg_dump when designing backend features is usually not worthwhile.

-- 
Peter Eisentraut   peter_e@gmx.net   http://funkturm.homeip.net/~peter



pgsql-hackers by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: Column names - time
Next
From: Bill Studenmund
Date:
Subject: Re: Package support for Postgres