注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL 9.1 : 使用 "CREATE EXTENSION" 加载外部模块  

2011-08-22 15:55:18|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

        
          PostgreSQL 有很多外部模块可以加载,例如 dblink, pg_buffercache 等,在 9.1 版本
以前,如果对应的 postgresql-contrib 已经安装,只需要将对应的 sql 文件导入到目标库
即可,例如,要在 数据库 skytf 里安装 dblink 模块,只需要执行以下操作就行;

cd $PGHOME/share/contrib
psql -d skytf -U postgresql -f dblink.sql

         导入成功之后,那么 dblink 模块即加载成功。在 9.1 版本以后,将有些不同,模块加载
环节 PostgreSQL 提供命令 "CREATE EXTENSION" 来替代以上操作。


--手册上的解释
CREATE EXTENSION
Name

CREATE EXTENSION -- install an extension
Synopsis

CREATE EXTENSION [ IF NOT EXISTS ] extension_name
    [ WITH ] [ SCHEMA schema ]
             [ VERSION version ]
             [ FROM old_version ]Description
            
CREATE EXTENSION loads a new extension into the current database. There must not be an extension of the same name already loaded.

Loading an extension essentially amounts to running the extension's script file. The script will typically create new SQL objects such as functions, data types, operators and index support methods. CREATE EXTENSION additionally records the identities of all the created objects, so that they can be dropped again if DROP EXTENSION is issued.

Loading an extension requires the same privileges that would be required to create its component objects. For most extensions this means superuser or database owner privileges are needed. The user who runs CREATE EXTENSION becomes the owner of the extension for purposes of later privilege checks, as well as the owner of any objects created by the extension's script.

    备注:上面的内容就不翻译了, 执行 "CREATE EXTENSION " 时需要使用超级用户来执行。
                更多信息请查阅 http://www.postgresql.org/docs/9.1/static/sql-createextension.html  

--9.1 版本加载 dblink 模块
[postgres@pg1 ~]$ psql skytf
psql (9.1beta3)
Type "help" for help.

skytf=# create extension dblink;
CREATE EXTENSION

   备注:这个命令执行之后,即加载了 "/opt/pgsql/share/extension/" 目录下的 dblnk 模块,而不需要手工
              指定SQL脚本。这是与之前版本的不同。
        

--9.1 之前版本迁移到9.1 版本需要的操作
CREATE EXTENSION module_name FROM unpackaged;

 备注:如果将9.1版本以下的数据库迁移到 9.1 版本,并且老库使用了外部模块,那么在数据库迁移后,
            需要执行以上命令,上面这个命令的作用是更新老库加载的对象信息。如果这步不执行,老库里
            加载的模块对象在9 .1 版本上将不可用。

 

--查询已安装的 extension      
skytf=# select extname,extowner,extnamespace,extrelocatable,extversion from pg_extension;
      extname       | extowner | extnamespace | extrelocatable | extversion
--------------------+----------+--------------+----------------+------------
 plpgsql            |       10 |           11 | f              | 1.0
 pg_stat_statements |       10 |         2200 | t              | 1.0
 dblink             |       10 |         2200 | t              | 1.0
(3 rows)

     备注:可以通过查询 pg_extension 视图来查看数据库已安装的 extension,  关于所有 extension 信息
                可以查阅视图 pg_available_extensions 和 pg_available_extension_versions,这里不详细说明了。
    
--pg_extension 字段解释

Name Type References Description
extname name   Name of the extension
extowner oid pg_authid.oid Owner of the extension
extnamespace oid pg_namespace.oid Schema containing the extension's exported objects
extrelocatable bool   True if extension can be relocated to another schema
extversion text   Version name for the extension
extconfig oid[] pg_class.oid Array of regclass OIDs for the extension's configuration table(s), or NULL if none
extcondition text[]   Array of WHERE-clause filter conditions for the extension's configuration table(s), or NULL if none

  评论这张
 
阅读(30848)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016