Re: RFC: Remove contrib entirely - Mailing list pgsql-hackers

From Stephen Frost
Subject Re: RFC: Remove contrib entirely
Date
Msg-id 20150529031004.GU26667@tamriel.snowman.net
Whole thread Raw
In response to Re: RFC: Remove contrib entirely  ("Joshua D. Drake" <jd@commandprompt.com>)
Responses Re: RFC: Remove contrib entirely
List pgsql-hackers
JD,

* Joshua D. Drake (jd@commandprompt.com) wrote:
> On 05/28/2015 06:50 PM, Peter Eisentraut wrote:
> >On 5/28/15 3:35 PM, Stephen Frost wrote:
> >>What we would need for this is an 'extensions' directory, or similar,
> >>and a clear definition of what the requirements are around getting into
> >>it are.  With that, we could decide for each module currently in contrib
> >>if it should go into the 'extensions' directory.  I'm not sure that we
> >>would necessairly have to remove the contrib module or any modules which
> >>are deemed to not be appropriate for the 'extensions' directory.
> >
> >This seems reasonable to me.  It's in line with the recent move from
> >contrib to bin.  It'll just be quite a bit bigger of an undertaking.
> >(50 threads to discuss the merits of each module separately?)  Maybe
> >start by picking the top 5 and sort those out.
>
> The thing is, we don't have that many to argue about now, in fact:

Alright, I'll bite. :)

> F.1. adminpack

Need it- pgAdmin can't senibly install it or even include it in some
way, and it'd be *very* painful to not have it for a lot of users.

> F.2. auth_delay

Should be a core feature.  Having this in a contrib module is silly.

> F.3. auto_explain

Move to extension directory in the repo.

> F.4. btree_gin
> F.5. btree_gist

Both of these should simply be in core.

> F.6. chkpass
> F.7. citext
> F.8. cube

Push out and/or keep it in contrib in repo.

> F.9. dblink

Move to extension directory in the repo.

> F.10. dict_int
> F.11. dict_xsyn

Looks like these are just examples?  Maybe move to an 'examples'
directory, or into src/test/modules, or keep in contrib.

> F.12. earthdistance

Depends on cube, so, same as whatever happens there.  I don't think
extensions-in-repo should depend on contrib modules, as a rule.

> F.13. file_fdw
> F.14. fuzzystrmatch
> F.15. hstore

Move to extension directory in the repo.

> F.16. intagg

Obsolute, per the docs.  Push out and deal with the break, or keep it in
contrib in repo.

> F.17. intarray

Move to extension directory in the repo.

> F.18. isn
> F.19. lo
> F.20. ltree
> F.21. pageinspect

Move to extension directory in the repo.

> F.22. passwordcheck

Should be an in-core capability and not shoved off into an extension.

> F.23. pg_buffercache

Pull it into core.

> F.24. pgcrypto

Move to extension directory in the repo.

> F.25. pg_freespacemap

Should be in core.

> F.26. pg_prewarm
> F.27. pgrowlocks

Should be in core.

> F.28. pg_stat_statements

I'd actually prefer that this be in core, but I'd be alright with it
being in extension directory in the repo.

> F.29. pgstattuple
> F.30. pg_trgm

Should be in core.

> F.31. postgres_fdw

Move to extension directory in the repo.
(actually, I'd be fine with both this and file_fdw being included in
core..  I'm just not 100% sure how that'd look)

> F.32. seg
> F.33. sepgsql

Move to extension directory in the repo.

> F.34. spi

Maybe pull some into core..  or maybe all, or move to an extension.

> F.35. sslinfo

Should be in core.

> F.36. tablefunc

My gut reaction is that it should be in core for crosstab(), but David's
talking about implementing PIVOT, so..

> F.37. tcn

Should be in core, imv, but not a position I hold very strongly.

> F.38. test_decoding

Should be in src/test/modules, or maybe some 'examples' dir.

> F.39. tsearch2

I'm inclined to just drop this..  Or we could keep it in contrib in the
repo.

> F.40. tsm_system_rows
> F.41. tsm_system_time

These should be in core.

> F.42. unaccent

Move to extension directory in the repo.

> F.43. uuid-ossp

This one probably deserves its own thread, heh..

> F.44. xml2

Push it out, or keep it in contrib in repo.

> Look at these, a lot of them are obvious... just include for goodness sakes:
>
> pg_trgm has been in contrib for a decade of not more. Either rip it
> out or include it by default.
>
> postgres_fdw (by the time we make the change it will be two releases)

Agreed.

> sepgsql has no business being in core, it is:
>
> 1. An extension
> 2. About as linux specific as we can get

Not sure that being platform agnostic has to be a requirement of being
in the repo or being an extension in the repo...  It does need some work
though and discussion has recently started about if the sepgsql types
defined in the SELinux reference policy should continue to exist or if
they should be changed.  I'm following that discussion with interest.

> Adminpack:
>
> It is for pgAdmin, give it back or push it into core proper

I'd keep it in the repo as an extension.  Pushing it out would just
cause lots of trouble for little gain.

> I just don't think this would be that hard if we were willing to put
> our minds to it.
>
> Or.. another way:
>
> Nobody has yet to provide an argument as to why we need contrib when
> we have a fully functioning extension capability.

pg_stat_statements is perhaps one of the best reasons.  Not something
that we necessairly want to force on everyone who installs PG
(presumably the additional shared memory and performance impact is an
issue for some people...  though I'm not sure I agree, though it's been
a while since that discussion and perhaps the impact looks like less
from a distance), but a capability that we absolutely want to have.

Not sure if we want the FDWs to be installed by default...  I had been
thinking there would be an issue with that at first, but the more I
consider it, the more I'm agreeing with you that we should just pull in
both postgres_fdw and file_fdw.

Still, there are extensions which we'll want to have because they simply
can't be included in core for one reason or another, they're very useful
bits of code, and we're willing and eager to maintain them moving
forward.

One of the big questions which will arise out of this though is- how do
we describe contrib vs. this set of extensions?  Do we treat security
issues in the 'new' contrib differently?  Do we only leave things which
are examples or are deprecated in the 'new' contrib?  I'm presuming that
the items which end up in 'extensions' are more formally considered part
of the project and therefore held to the overall project standard (as
contrib is now being, even though it clearly wasn't always that way).

> Freeze contrib. What is in there now, is all there will ever be in
> there and the goal is to slowly reduce it to the point that it
> doesn't matter.

I don't particularly like this option.
Thanks!
    Stephen

pgsql-hackers by date:

Previous
From: Alvaro Herrera
Date:
Subject: Re: Re: [GENERAL] 9.4.1 -> 9.4.2 problem: could not access status of transaction 1
Next
From: Alvaro Herrera
Date:
Subject: Re: Re: [GENERAL] 9.4.1 -> 9.4.2 problem: could not access status of transaction 1