adminpack and pg_catalog

Started by Neil Conwayabout 19 years ago22 messages
#1Neil Conway
neilc@samurai.com

Why does adminpack install functions into pg_catalog? This is
inconsistent with the rest of the contrib/ packages, not to mention the
definition of pg_catalog itself (which ought to hold builtin object
definitions). And as AndrewSN pointed out on IRC, it also breaks
pg_dump.

-Neil

#2Jim C. Nasby
jim@nasby.net
In reply to: Neil Conway (#1)
Re: adminpack and pg_catalog

On Thu, Oct 19, 2006 at 02:37:34PM -0400, Neil Conway wrote:

Why does adminpack install functions into pg_catalog? This is
inconsistent with the rest of the contrib/ packages, not to mention the
definition of pg_catalog itself (which ought to hold builtin object
definitions). And as AndrewSN pointed out on IRC, it also breaks
pg_dump.

When we wrote newsysviews we faced the same dilema of where to put
things. We ultimately decided on a pg_ schema in the hope that no one
else would use that name (we also prefaced everything in the schema with
pg_, but a big reason for that was potential inclusion into core).
--
Jim Nasby jim@nasby.net
EnterpriseDB http://enterprisedb.com 512.569.9461 (cell)

#3Dave Page
dpage@vale-housing.co.uk
In reply to: Neil Conway (#1)
Re: adminpack and pg_catalog

On 19/10/06 19:37, "Neil Conway" <neilc@samurai.com> wrote:

Why does adminpack install functions into pg_catalog? This is
inconsistent with the rest of the contrib/ packages, not to mention the
definition of pg_catalog itself (which ought to hold builtin object
definitions).

The adminpack was originally written and intended to become builtin
functions, and in fact most of it has. pg_catalog was used to ensure
compatibility in the future, and because it's the only schema we can be sure
we'll find in any given database.

And as AndrewSN pointed out on IRC, it also breaks
pg_dump.

It does? In what way? I don't recall ever having any trouble restoring dumps
in the past.

Regards, Dave.

#4Andreas Pflug
pgadmin@pse-consulting.de
In reply to: Neil Conway (#1)
Re: adminpack and pg_catalog

Neil Conway wrote:

Why does adminpack install functions into pg_catalog? This is
inconsistent with the rest of the contrib/ packages, not to mention the
definition of pg_catalog itself (which ought to hold builtin object
definitions). And as AndrewSN pointed out on IRC, it also breaks
pg_dump.

Having pg_dump not saving the function definitions is an intended
behaviour. Actually, this was different with admin80, and restoring a
8.0 backup to a 8.1 server will throw several errors now.
I'd consider installing contrib modules as an act of installation, not
something that backup/restore should perform (finally, pg_restore isn't
able to do so, since it can't provide the dll/lib module).

Regards,
Andreas

#5Neil Conway
neilc@samurai.com
In reply to: Andreas Pflug (#4)
Re: adminpack and pg_catalog

On Fri, 2006-10-20 at 11:50 +0200, Andreas Pflug wrote:

Having pg_dump not saving the function definitions is an intended
behaviour.

The manual defines the pg_catalog schema as containing "the system
tables and all the built-in data types, functions, and
operators" (section 5.7.5). adminpack is none of the above, so I don't
think it should be located in pg_catalog.

I'd consider installing contrib modules as an act of installation, not
something that backup/restore should perform

AFAICS this is inconsistent with how every other contrib module behaves:
installing the contrib module into a database results in DDL for that
contrib module being included in pg_dump's output.

(finally, pg_restore isn't able to do so, since it can't provide
the dll/lib module).

This is not related to adminpack per se: pg_dump is never be able to
provide the shared object for any C language UDF. By your logic, pg_dump
shouldn't emit DDL for any such function.

-Neil

#6Neil Conway
neilc@samurai.com
In reply to: Dave Page (#3)
Re: adminpack and pg_catalog

On Fri, 2006-10-20 at 05:52 +0100, Dave Page wrote:

The adminpack was originally written and intended to become builtin
functions

This is not unique to adminpack: several contrib modules might
eventually become (or have already become) builtins, but adminpack is
the only module that defines objects in the pg_catalog schema.

pg_catalog was used to ensure compatibility in the future

This is again not unique to adminpack. If users install a contrib module
into a schema that is in their search path, then if the module is
subsequently moved to pg_catalog, no queries will need to be changed. If
users install a module into some schema that isn't in their search path
and use explicit schema references, they are essentially asking for
their application to break if the object moves to a different schema.

And as AndrewSN pointed out on IRC, it also breaks pg_dump.

It does? In what way?

It breaks in the sense of "completely not working" :)

% pg_dump | grep file_write
% cd contrib/adminpack
% grep -A1 file_write adminpack.sql
CREATE FUNCTION pg_catalog.pg_file_write(text, text, bool) RETURNS
bigint
AS '$libdir/adminpack', 'pg_file_write'
LANGUAGE C VOLATILE STRICT;
% psql -f adminpack.sql
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
% pg_dump | grep file_write
%

-Neil

#7Peter Eisentraut
peter_e@gmx.net
In reply to: Neil Conway (#1)
Re: adminpack and pg_catalog

Neil Conway wrote:

Why does adminpack install functions into pg_catalog? This is
inconsistent with the rest of the contrib/ packages, not to mention
the definition of pg_catalog itself (which ought to hold builtin
object definitions).

Nothing except initdb should add objects in pg_catalog. AFAICS,
adminpack doesn't have any special requirements, so it should behave
like all other contrib modules.

--
Peter Eisentraut
http://developer.postgresql.org/~petere/

#8Andreas Pflug
pgadmin@pse-consulting.de
In reply to: Neil Conway (#6)
Re: adminpack and pg_catalog

Neil Conway wrote:

On Fri, 2006-10-20 at 05:52 +0100, Dave Page wrote:

The adminpack was originally written and intended to become builtin
functions

This is not unique to adminpack: several contrib modules might
eventually become (or have already become) builtins, but adminpack is
the only module that defines objects in the pg_catalog schema.

.. which appears simply pragmatic, taken that it features server
maintenance functions, not functions usually called from user applications.

pg_catalog was used to ensure compatibility in the future

This is again not unique to adminpack. If users install a contrib module
into a schema that is in their search path, then if the module is
subsequently moved to pg_catalog, no queries will need to be changed. If
users install a module into some schema that isn't in their search path
and use explicit schema references, they are essentially asking for
their application to break if the object moves to a different schema.

Please note that adminpack is intended for administrator's use, and
should be robust to (i.e. not dependent on) search path. We previously
had this dependency in pgadmin, and found it sucks. Putting the stuff in
pg_catalog works as desired and has no negative effects (apart from the
contrib not working after pg_dump/pg_restore if not installed, which is
expected behaviour anyway).

However, adminpack was crippled to the edge of usability for me already,
I'm prepared to see it fade away further (Since there's still no
pg_terminate_backend available which is definitely needed, I regularly
need to install my personal adminpack).

Regards,
Andreas

#9Neil Conway
neilc@samurai.com
In reply to: Peter Eisentraut (#7)
Re: adminpack and pg_catalog

On Fri, 2006-10-20 at 22:59 +0200, Peter Eisentraut wrote:

Nothing except initdb should add objects in pg_catalog. AFAICS,
adminpack doesn't have any special requirements, so it should behave
like all other contrib modules.

Okay. Are there any opinions on whether we should make this change to
contrib/adminpack now (i.e. during the 8.2 beta), later (for 8.3), or
not all at?

-Neil

#10Robert Treat
xzilla@users.sourceforge.net
In reply to: Neil Conway (#9)
Re: adminpack and pg_catalog

On Friday 20 October 2006 21:03, Neil Conway wrote:

On Fri, 2006-10-20 at 22:59 +0200, Peter Eisentraut wrote:

Nothing except initdb should add objects in pg_catalog. AFAICS,
adminpack doesn't have any special requirements, so it should behave
like all other contrib modules.

Okay. Are there any opinions on whether we should make this change to
contrib/adminpack now (i.e. during the 8.2 beta), later (for 8.3), or
not all at?

Not saying we should or shouldn't, but if we are going to do it, istm we ought
to do it now while we are still in beta. Is there a backwards compatability
issue for older systems? (Not that this doesn't get worse if we release yet
another release with it)

--
Robert Treat
Build A Brighter LAMP :: Linux Apache {middleware} PostgreSQL

#11Tom Lane
tgl@sss.pgh.pa.us
In reply to: Neil Conway (#9)
Re: adminpack and pg_catalog

Neil Conway <neilc@samurai.com> writes:

On Fri, 2006-10-20 at 22:59 +0200, Peter Eisentraut wrote:

Nothing except initdb should add objects in pg_catalog. AFAICS,
adminpack doesn't have any special requirements, so it should behave
like all other contrib modules.

Okay. Are there any opinions on whether we should make this change to
contrib/adminpack now (i.e. during the 8.2 beta), later (for 8.3), or
not all at?

AFAIR the point of adminpack was to support pgAdmin, which expects those
functions to be in pg_catalog. At some point we might as well just take
it out instead of whack it until it meets some arbitrary restrictions
and isn't at all backwards-compatible anymore.

(No, I don't find these arguments that it mustn't put anything in
pg_catalog to be very compelling ... if we seriously believed that,
we'd have arranged for the system to enforce it.)

regards, tom lane

#12Dave Page
dpage@vale-housing.co.uk
In reply to: Tom Lane (#11)
Re: adminpack and pg_catalog

-----Original Message-----
From: "Neil Conway" <neilc@samurai.com>
To: "Peter Eisentraut" <peter_e@gmx.net>
Cc: "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>; "Dave Page" <dpage@vale-housing.co.uk>
Sent: 21/10/06 02:03
Subject: Re: [HACKERS] adminpack and pg_catalog

On Fri, 2006-10-20 at 22:59 +0200, Peter Eisentraut wrote:

Nothing except initdb should add objects in pg_catalog. AFAICS,
adminpack doesn't have any special requirements, so it should behave
like all other contrib modules.

Okay. Are there any opinions on whether we should make this change to
contrib/adminpack now (i.e. during the 8.2 beta), later (for 8.3), or

not all at?

If you change it you will make it useless as pgAdmin won't necessarily find the functions it expects. You might as well just remove it (which will almost certainly cause delays to pgAdmin - and pgInstallers - release as I'll need to find time to put it all back how it was).

Regards, Dave

#13Dave Page
dpage@vale-housing.co.uk
In reply to: Dave Page (#12)
Re: adminpack and pg_catalog

-----Original Message-----
From: "Neil Conway" <neilc@samurai.com>
To: "Dave Page" <dpage@vale-housing.co.uk>
Cc: "PostgreSQL-development" <pgsql-hackers@postgresql.org>
Sent: 20/10/06 21:19
Subject: Re: adminpack and pg_catalog

It breaks in the sense of "completely not working" :)

No, it does not 'break pg_dump'. What you have shown is that pg_dump doesn't dump adminpack which is exactly what we want, and perfectly correct behaviour from pg_dump.

Regards, Dave

#14Peter Eisentraut
peter_e@gmx.net
In reply to: Dave Page (#12)
Re: adminpack and pg_catalog

Dave Page wrote:

If you change it you will make it useless as pgAdmin won't
necessarily find the functions it expects. You might as well just
remove it (which will almost certainly cause delays to pgAdmin - and
pgInstallers - release as I'll need to find time to put it all back
how it was).

If pgAdmin is going to dictate what we do with adminpack, adminpack
should rather be shipped with pgAdmin.

--
Peter Eisentraut
http://developer.postgresql.org/~petere/

#15Simon Riggs
simon@2ndquadrant.com
In reply to: Peter Eisentraut (#14)
Re: adminpack and pg_catalog

On Sat, 2006-10-21 at 12:37 +0200, Peter Eisentraut wrote:

Dave Page wrote:

If you change it you will make it useless as pgAdmin won't
necessarily find the functions it expects. You might as well just
remove it (which will almost certainly cause delays to pgAdmin - and
pgInstallers - release as I'll need to find time to put it all back
how it was).

If pgAdmin is going to dictate what we do with adminpack, adminpack
should rather be shipped with pgAdmin.

Admin tools are critical.

adminpack is being made available for any and all admin packages, so all
tools, including for example psql *could* be enhanced to use those.
Whether they do is up to them, but at least their life is potentially
easier.

--
Simon Riggs
EnterpriseDB http://www.enterprisedb.com

#16Neil Conway
neilc@samurai.com
In reply to: Peter Eisentraut (#7)
Re: adminpack and pg_catalog

On Fri, 2006-10-20 at 22:59 +0200, Peter Eisentraut wrote:

Nothing except initdb should add objects in pg_catalog. AFAICS,
adminpack doesn't have any special requirements, so it should behave
like all other contrib modules.

Where are we on this? When this topic was last discussed, the three
alternatives were:

(1) Modify contrib/adminpack to not use the pg_catalog schema,
per the consensus that contrib/ packages installing objects
into that schema is broken behavior

(2) Don't modify contrib/adminpack, for the sake of backward
compatibility

(3) Remove contrib/adminpack from the Postgres distribution

I think the discussion was edging toward #3, but #2 is the only option
that I'm not happy with. Any other opinions out there?

Cheers,

Neil

#17Dave Page
dpage@postgresql.org
In reply to: Neil Conway (#16)
Re: adminpack and pg_catalog

Neil Conway wrote:

On Fri, 2006-10-20 at 22:59 +0200, Peter Eisentraut wrote:

Nothing except initdb should add objects in pg_catalog. AFAICS,
adminpack doesn't have any special requirements, so it should behave
like all other contrib modules.

Where are we on this? When this topic was last discussed, the three
alternatives were:

(1) Modify contrib/adminpack to not use the pg_catalog schema,
per the consensus that contrib/ packages installing objects
into that schema is broken behavior

(2) Don't modify contrib/adminpack, for the sake of backward
compatibility

(3) Remove contrib/adminpack from the Postgres distribution

I think the discussion was edging toward #3, but #2 is the only option
that I'm not happy with. Any other opinions out there?

Looking back over the thread, it appears that only you and Peter
objected to it as it is now. Tom, Andreas and myself were of the opinion
it was fine as it is, and whilst he didn't comment on how it should be
implemented, Simon made the point that supporting admin tools from the
core distribution was important which I take to mean he is against #3.

Regards, Dave.

#18Simon Riggs
simon@2ndquadrant.com
In reply to: Dave Page (#17)
Re: adminpack and pg_catalog

On Mon, 2006-11-06 at 09:02 +0000, Dave Page wrote:

Neil Conway wrote:

On Fri, 2006-10-20 at 22:59 +0200, Peter Eisentraut wrote:

Nothing except initdb should add objects in pg_catalog. AFAICS,
adminpack doesn't have any special requirements, so it should behave
like all other contrib modules.

Where are we on this? When this topic was last discussed, the three
alternatives were:

(1) Modify contrib/adminpack to not use the pg_catalog schema,
per the consensus that contrib/ packages installing objects
into that schema is broken behavior

(2) Don't modify contrib/adminpack, for the sake of backward
compatibility

(3) Remove contrib/adminpack from the Postgres distribution

I think the discussion was edging toward #3, but #2 is the only option
that I'm not happy with. Any other opinions out there?

Looking back over the thread, it appears that only you and Peter
objected to it as it is now. Tom, Andreas and myself were of the opinion
it was fine as it is, and whilst he didn't comment on how it should be
implemented, Simon made the point that supporting admin tools from the
core distribution was important which I take to mean he is against #3.

Definitely against #3. [Argument: not just pgAdmin, essential feature]

At the moment we only allow 2 types of table. Approved core catalog
tables and user tables.

ISTM we need 3 types of tables, with the additional type being add-on
system functionality, such as adminpack, but also possibly including
performance logging tables, extended trace tools, security packages
(e.g. Veil) etc etc. We have made provision for user add-ons to allocate
LWlocks and shared memory, but no provision for additional tables.
Surely we must be able to accommodate things as simple as additional
tables?

So we would then have (change names as appropriate)
- core catalog
- catalog extensions
- user tables.

--
Simon Riggs
EnterpriseDB http://www.enterprisedb.com

#19Tom Lane
tgl@sss.pgh.pa.us
In reply to: Simon Riggs (#18)
Re: adminpack and pg_catalog

"Simon Riggs" <simon@2ndquadrant.com> writes:

At the moment we only allow 2 types of table. Approved core catalog
tables and user tables.

ISTM we need 3 types of tables, with the additional type being add-on
system functionality, such as adminpack,

What? The adminpack module only creates functions.

regards, tom lane

#20Simon Riggs
simon@2ndquadrant.com
In reply to: Tom Lane (#19)
Re: adminpack and pg_catalog

On Mon, 2006-11-06 at 13:37 -0500, Tom Lane wrote:

"Simon Riggs" <simon@2ndquadrant.com> writes:

At the moment we only allow 2 types of table. Approved core catalog
tables and user tables.

ISTM we need 3 types of tables, with the additional type being add-on
system functionality, such as adminpack,

What? The adminpack module only creates functions.

AFAIK the namespace is the issue, not the type of object.

As I mentioned, we can add LWlock extensions but we don't have an
official home for other database objects.

--
Simon Riggs
EnterpriseDB http://www.enterprisedb.com

#21Robert Treat
xzilla@users.sourceforge.net
In reply to: Simon Riggs (#18)
Re: adminpack and pg_catalog

On Monday 06 November 2006 13:12, Simon Riggs wrote:

On Mon, 2006-11-06 at 09:02 +0000, Dave Page wrote:

Neil Conway wrote:

On Fri, 2006-10-20 at 22:59 +0200, Peter Eisentraut wrote:

Nothing except initdb should add objects in pg_catalog. AFAICS,
adminpack doesn't have any special requirements, so it should behave
like all other contrib modules.

Where are we on this? When this topic was last discussed, the three
alternatives were:

(1) Modify contrib/adminpack to not use the pg_catalog schema,
per the consensus that contrib/ packages installing objects
into that schema is broken behavior

(2) Don't modify contrib/adminpack, for the sake of backward
compatibility

(3) Remove contrib/adminpack from the Postgres distribution

I think the discussion was edging toward #3, but #2 is the only option
that I'm not happy with. Any other opinions out there?

Looking back over the thread, it appears that only you and Peter
objected to it as it is now. Tom, Andreas and myself were of the opinion
it was fine as it is, and whilst he didn't comment on how it should be
implemented, Simon made the point that supporting admin tools from the
core distribution was important which I take to mean he is against #3.

Definitely against #3. [Argument: not just pgAdmin, essential feature]

While I don't disagree that this is an important feature, the fact that it is
being designed with pgadmin specific backwards compatability (for example the
functions that rename core functions) leaves me dubious as to it being a more
general solution. Because of that I would be comfortable with acting on #3.

Now, if I ignore the above, and focus on that I would like to see this
functionality because it helps me with phppgadmin, then I would lean toward
#1 (for a number of reasons really)

Personally I think I'd rather see the whole thing pulled, renamed to its own
schema, and toss in a version function and a kill backend function and let it
go on its merry way... in any case #2 just seems to be the worst of all
possibilities.

--
Robert Treat
Build A Brighter LAMP :: Linux Apache {middleware} PostgreSQL

#22Dave Page
dpage@postgresql.org
In reply to: Robert Treat (#21)
Re: adminpack and pg_catalog

Robert Treat wrote:

While I don't disagree that this is an important feature, the fact that it is
being designed with pgadmin specific backwards compatability (for example the
functions that rename core functions) leaves me dubious as to it being a more
general solution. Because of that I would be comfortable with acting on #3.

The rename happened because when one of the functions was moved into
core, someone decided to rename it along the way which broke
compatibility with previous versions of pgAdmin.

Whilst I won't in any way deny that the adminpack was specifically
written for pgAdmin though, I have no problem with it being enhanced to
provide non-core functionality for other admin tools in the future... in
fact I would encourage it. I think it's better to support as many admin
tools as possible from one contrib module, rather than for each tool to
have it's own.

Regards Dave.