Detecting functions installed by an extension

Started by Benjie Gillamalmost 8 years ago3 messagesgeneral
Jump to latest
#1Benjie Gillam
benjie@jemjie.com

Greetings!

How can I tell, using the system catalog or information schema, if a
function/procedure was created by an extension as opposed to by the user
(i.e. would be dropped if you performed "DROP EXTENSION")? So far I've
looked at the `pg_extension` table, which lists the class IDs of
configuration tables but doesn't mention procedures. I've looked at
`pg_proc` but that doesn't seem to contain the information. I've also
scanned over various other system catalogues but with no luck. Is this
information available in one of the system catalogs? Does PostgreSQL itself
track this information so that it can perform cleanup, or does it expect
the extension to clean up after itself?

Thank you for your time,

Benjie.

#2Vik Fearing
vik@postgresfriends.org
In reply to: Benjie Gillam (#1)
Re: Detecting functions installed by an extension

On 17/06/18 10:05, Benjie Gillam wrote:

Greetings!

How can I tell, using the system catalog or information schema, if a
function/procedure was created by an extension as opposed to by the user
(i.e. would be dropped if you performed "DROP EXTENSION")? So far I've
looked at the `pg_extension` table, which lists the class IDs of
configuration tables but doesn't mention procedures. I've looked at
`pg_proc` but that doesn't seem to contain the information. I've also
scanned over various other system catalogues but with no luck. Is this
information available in one of the system catalogs? Does PostgreSQL
itself track this information so that it can perform cleanup, or does it
expect the extension to clean up after itself?

All dependencies are tracked in the system catalog pg_depend.

If you do \set ECHO_HIDDEN on in psql and then \dx+ an_extension you
can see what queries psql uses to get the information. That should put
you well on your way to doing what you want.
--
Vik Fearing +33 6 46 75 15 36
http://2ndQuadrant.fr PostgreSQL : Expertise, Formation et Support

#3Benjie Gillam
benjie@jemjie.com
In reply to: Vik Fearing (#2)
Re: Detecting functions installed by an extension

On 17 June 2018 at 10:26, Vik Fearing <vik.fearing@2ndquadrant.com> wrote:

On 17/06/18 10:05, Benjie Gillam wrote:

Greetings!

How can I tell, using the system catalog or information schema, if a
function/procedure was created by an extension as opposed to by the user
(i.e. would be dropped if you performed "DROP EXTENSION")? So far I've
looked at the `pg_extension` table, which lists the class IDs of
configuration tables but doesn't mention procedures. I've looked at
`pg_proc` but that doesn't seem to contain the information. I've also
scanned over various other system catalogues but with no luck. Is this
information available in one of the system catalogs? Does PostgreSQL
itself track this information so that it can perform cleanup, or does it
expect the extension to clean up after itself?

All dependencies are tracked in the system catalog pg_depend.

If you do \set ECHO_HIDDEN on in psql and then \dx+ an_extension you
can see what queries psql uses to get the information. That should put
you well on your way to doing what you want.
--
Vik Fearing +33 6 46 75 15 36
http://2ndQuadrant.fr PostgreSQL : Expertise, Formation et Support

It seems so obvious in retrospect! This works beautifully - thanks 🙏

Benjie.