Listing extensions in this database
Every PostgreSQL database contains some objects that are automatically brought in when the database is created. Every user will find a pg_database
 system catalog that lists databases, as shown in the Listing databases on this database server recipe. There is little point in checking whether these objects exist because even superusers are not allowed to drop them.
On the other hand, PostgreSQL comes with tens of collections of optional objects, called modules, or equivalently extensions. The database administrator can install or uninstall these objects, depending on the requirements. They are not automatically included in a newly created database because they might not be required by every use case. Users will install only the extensions they actually need, when they need them; an extension can be installed while a database is up and running.
In this recipe, we will explain how to list extensions that have been installed on the current database. This is important for getting to know the database better, and also because certain extensions affect the behavior of the database.
How to do it…
In PostgreSQL, there is a catalog table recording the list of installed extensions, so this recipe is quite simple. Issue the following command:
cookbook=> SELECT * FROM pg_extension;
This results in the following output:
-[ RECORD 1 ]--+-------- oid            | 13693 extname        | plpgsql extowner       | 10 extnamespace   | 11 extrelocatable | f extversion     | 1.0 extconfig      | extcondition   |
Note
Note that the format is expanded, as if the \x
 meta command has been previously issued.
To get the same list with fewer technical details, you can use the \dx
 meta command, as when listing databases.
How it works…
A PostgreSQL extension is represented by a control file, <extension name>.control
, located in the SHAREDIR/extension
 directory, plus one or more files containing the actual extension objects. The control file specifies the extension name, version, and other information that is useful for the extension infrastructure. Each time an extension is installed, uninstalled, or upgraded to a new version, the corresponding row in the pg_extension
 catalog table is inserted, deleted, or updated, respectively.
There's more…
In this recipe, we only mentioned extensions distributed with PostgreSQL, and solely for the purpose of listing which ones are being used in the current database. The infrastructure for extensions will be described in greater detail in Chapter 3, Server Configuration. We will talk about the version number of an extension, and we will show you how to install, uninstall, and upgrade extensions, including those distributed independently of PostgreSQL.
See also
To get an idea of which extensions are available, you can browse the list of additional modules shipped together with PostgreSQL, which are almost all extensions, at https://www.postgresql.org/docs/current/static/contrib.html.