在处理扩展时,可以使用三个主要目录:
- pg_extension;
- pg_available_extension_versions;
- pg_available_extensions.
前者pg_extension提供有关当前数据库中安装了哪些扩展的信息,而后者pg_available_extensions提供了有关哪些扩展可用于集群的信息。
区别很简单:要使用,扩展必须首先出现在 上pg_available_extensions,这意味着它已安装在集群上(例如,通过pgxnclient)。从此,扩展可以通过语句安装到数据库中CREATE EXTENSION;因此,扩展名将出现在pg_extension目录中。
举个例子:
testdb=> select name, default_version from pg_available_extensions;
name | default_version
--------------------|-----------------
intagg | 1.1
plpgsql | 1.0
dict_int | 1.0
dict_xsyn | 1.0
adminpack | 2.1
intarray | 1.3
amcheck | 1.2
autoinc | 1.0
isn | 1.2
bloom | 1.0
fuzzystrmatch | 1.1
jsonb_plperl | 1.0
btree_gin | 1.3
jsonb_plperlu | 1.0
btree_gist | 1.5
hstore | 1.7
hstore_plperl | 1.0
hstore_plperlu | 1.0
citext | 1.6
lo | 1.1
ltree | 1.2
cube | 1.4
insert_username | 1.0
moddatetime | 1.0
dblink | 1.2
earthdistance | 1.1
file_fdw | 1.0
pageinspect | 1.8
pg_buffercache | 1.3
pg_freespacemap | 1.2
pg_prewarm | 1.2
pg_stat_statements | 1.8
pg_trgm | 1.5
pg_visibility | 1.2
pgcrypto | 1.3
pgrowlocks | 1.2
pgstattuple | 1.5
postgres_fdw | 1.0
refint | 1.0
seg | 1.3
bool_plperl | 1.0
plperlu | 1.0
sslinfo | 1.2
anon | 0.9.0
tablefunc | 1.0
tcn | 1.0
tsm_system_rows | 1.0
bool_plperlu | 1.0
tsm_system_time | 1.0
pgaudit | 1.5
pg_qualstats | 2.0.2
unaccent | 1.1
plperl | 1.0
orafce | 3.13
uuid-ossp | 1.1
xml2 | 1.1
pg_background | 1.0
上面的列表代表了集群上安装的所有可用扩展,因此我可以对其执行CREATE EXTENSION。
该pg_available_extensions有一个installed_version提供安装在当前数据库中的扩展的版本号,或现场NULL如果扩展未安装在当前数据库中。因此,为了知道数据库中是否安装了扩展,您可以运行如下查询:<br/<
testdb=> select name, default_version, installed_version
from pg_available_extensions
where installed_version is not null;
name | default_version | installed_version
---------------|-----------------|-------------------
plpgsql | 1.0 | 1.0
dblink | 1.2 | 1.2
orafce | 3.13 | 3.13
pg_background | 1.0 | 1.0
这有点费力,而且由于扩展可能在不同的数据库中安装了不同的标志,因此该pg_extension目录提供了更详细和缩小的信息:它列出了当前数据库上已安装的所有扩展。
因此,要查看数据库可以使用什么,即它可以访问哪些扩展,我需要使用pg_extension目录:
testdb=> select extname, extversion from pg_extension ;
extname | extversion
---------------|------------
plpgsql | 1.0
orafce | 3.13
dblink | 1.2
pg_background | 1.0
当前数据库的可用扩展列表要小得多。
扩展版本号
如您所知,一个扩展可以带有不同的版本号,这种机制的美妙之处在于可以很容易地将一个扩展从一个版本升级到另一个版本。
该pg_available_extensions目录仅提供可用扩展的最后(即,最新)版本。让我们尝试一个非常流行的扩展pg_stat_statements:
testdb=> select name, default_version, installed_version
from pg_available_extensions
where name = 'pg_stat_statements';
name | default_version | installed_version
--------------------|-----------------|-------------------
pg_stat_statements | 1.8 |
该扩展可以安装到该版本1.8,目前在当前数据库中不可用。
但是其他版本号呢?
该目录pg_available_extension_versions提供了扩展当前可用的所有可用版本的列表:
testdb=> select name, version, installed, relocatable
from pg_available_extension_versions
where name = 'pg_stat_statements'
order by version;
name | version | installed | relocatable
--------------------|---------|-----------|-------------
pg_stat_statements | 1.4 | f | t
pg_stat_statements | 1.5 | f | t
pg_stat_statements | 1.6 | f | t
pg_stat_statements | 1.7 | f | t
pg_stat_statements | 1.8 | f | t
如您所见,该扩展有五个不同的版本,我可以选择最适合我需求的版本。
该目录提供了不同的信息,特别是它可以让您了解扩展是否只能由超级用户 (field superuser) 或具有适当权限的用户 (field trusted) 以及其他必需的扩展 (field requires_name) 和可重定位性安装。




