PostgreSQL之 使用扩展Extension

PostgreSQL被设计为易于扩展。所以,加载到数据库中的扩展功能就能够像内置的特性同样运行。
与源代码一块儿发布的contrib/ 目录包含一些扩展。扩展是独立开发的,好比PostGIS。甚至PostgreSQL复制解决方案也能够在外部开发。

例如,Slony-I是一个受欢迎的主/备用复制解决方案,它是独立于核心项目开发的。

PG源代码中包含的扩展列表参考:
https://www.postgresql.org/docs/9.6/static/contrib.html

PostgreSQL引入了一种方式来安装contrib模块,称为扩展(extensions)。
此方法适用于全部使用扩展规范构建的contrib模块,包括以下:
扩展SQL文件( extension_name.sql )
扩展控制文件 ( extension_name.control )

扩展库文件(extension_name.so)html


找到系统中的contrib模块
检查你是否安装了contrib模块的一个好方法是查看pgbench程序是否可用。pgbench是安装了完整程序的少数contrib组件之一,而不单单只是你可使用的一个脚本。如下是在UNIX系统中检查pgbench的示例:
$ pgbench -V

pgbench (PostgreSQL) 9.6

在大多数Linux系统中,若是用户使用的是RPM或DEB打包版本的PostgreSQL,则可选的postgresql-contrib软件包中包含全部contrib模块及其关联的安装程序脚本。若是还没有安装,你可能须要使用yum,apt-get或相似的机制添加此软件包。在Solaris系统上,这个软件包名为SUNWpostgr-contrib。

咱们来看下面的命令,请注意必须用超级用户执行:
CREATE EXTENSION extension_name: 此命令将安装一个名为extension_name的新扩展
ALTER EXTENSION extension name: 此命令将更改扩展名,大多用于升级扩展。
DROP EXTENIONS extension_name: 在清理操做完成后,此命令用于删除一个扩展。

以上命令不能执行或执行报异常,一种多是contrib模块没有执行编译安装,能够到contrib/目录下执行

make&make install完成编译安装后在尝试执行以上命令。

示例:
cd /software/postgresql-9.5.7/contrib
make
make install

testdb=# create extension pg_buffercache;
CREATE EXTENSION

testdb=# \dx
                      List of installed extensions
      Name      | Version |   Schema   |           Description           
----------------+---------+------------+---------------------------------
 pg_buffercache | 1.1     | public     | examine the shared buffer cache
 pgstattuple    | 1.3     | public     | show tuple-level statistics
 plpgsql        | 1.0     | pg_catalog | PL/pgSQL procedural language

(3 rows)

这里新添加的扩展属于public模式,另外pg_catalog这个schema是PostgreSQL默认的元数据schema,全部的元数据都在这里。建立在pg_catalog里面的扩展优先级最高,全部用户可见。


能够运行以下指令指定或修改扩展的所属模式:sql

create extension extension_name with schema pg_catalog;
alter extension extension_name set schema pg_catalog;  

示例:
testdb=# alter extension pg_buffercache set schema pg_catalog;
ALTER EXTENSION

testdb=# \dx
                      List of installed extensions
      Name      | Version |   Schema   |           Description           
----------------+---------+------------+---------------------------------

 pg_buffercache | 1.1     | pg_catalog | examine the shared buffer cache
 pgstattuple    | 1.3     | public     | show tuple-level statistics
 plpgsql        | 1.0     | pg_catalog | PL/pgSQL procedural language

testdb=# drop extension pg_buffercache ;

DROP EXTENSION数据库


testdb=# \dx
                   List of installed extensions
    Name     | Version |   Schema   |         Description          
-------------+---------+------------+------------------------------
pgstattuple | 1.3     | public     | show tuple-level statistics
plpgsql     | 1.0     | pg_catalog | PL/pgSQL procedural language


(2 rows)
扩展被添加到每一个登陆的数据库上,若是让每一个数据库均可调用扩展模块,须要再每一个库上执行create extension,也能够在模板库template1 上建立后,做为新建数据库的拷贝。

除了PostgreSQL核心自带的程序、contrib模块和pgFoundry上提供的软件以外,还能够从互联网上获取许多其余程序,以使PostgreSQL更易用和更强大。post


by 波罗设计