|
写这篇帖子时:oracle_fdw-1.0.0 正式版是最新的版本
我们系统目前部署使用的版本为 oracle_fdw-0.9.5。
oracle_fdw-0.9.9 (beta )
开始支持pg9.3
oracle_fdw-0.9.10 (beta)
支持对外部表的 Insert ,delete ,update ,当前只对postgresql9.3 版本有效
增加表操作项 readonly (当值设置为 true|on|yes 表示不可以做增删改操作) 默认值false
对于postgresql9.2 这些选项虽然没有起到作用,但是建议将值设置为 (true|on|yes)
增加列操作项key ( 当需要对外部表进行delete,update 时 ,对表的主键所含的所有列 需要设置 key 值为 yes|on|true) 默认值false
CREATE FOREIGN TABLE oratab (
id integer OPTIONS (key 'true') NOT NULL,
text character varying(30),
floating double precision NOT NULL
) SERVER oradb OPTIONS (schema 'ORAUSER', table 'ORATAB' ,readonly 'yes');
oracle_fdw-1.0.0
添加函数oracle_diag(name) 用于打印一些版本信息
select * from oracle_diag('ora_cyp')
"oracle_fdw 1.0.0, PostgreSQL 9.3.4, Oracle client 11.2.0.1.0, Oracle server 10.2.0.4.0"
select * from oracle_diag()
"oracle_fdw 1.0.0, PostgreSQL 9.3.4, Oracle client 11.2.0.1.0, ORACLE_HOME=/data/oracle/product/11.2.0/client"
当从旧版本升级到新版本的ora_fdw 时,请使用 alter extension oracle_fdw update ; 进行更新
对postgresql9.4 版本支持在trigger 中使用 外部表。
注意点:
在 oracle_fdw-0.9.5 时 ,建外部表 table 选项 表的名字可以用小写,在新版本中,表名必须用大写,否则会报如下错误
ERROR: Oracle table "pdl_ad" for foreign table "ora_pdl_ad" does not exist or does not allow read access
DETAIL: ORA-00942: table or view does not exist
HINT: Oracle table names are case sensitive (normally all uppercase).
当oracle 版本是11gr2 以上版本 ,如果使用oracle_fdw 往新表插入第一笔数据时会引发serialization error错误
这个是由于11.2 版本的一个新特性 deferred segment creation ,当建表时只在数据字典中记录,只有当该表生成记录时才分配空间
SQL> show parameter deferred_segment_creation;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation boolean TRUE
为避免这种情况发生,可以在oracle 建表时指定 create table 。。。 SEGMENT CREATION IMMEDIATE
|