澳门新葡亰网址下载PostgreSQL 9.6 更新版本发布说明

by admin on 2020年4月25日

PostgreSQL是世界上最先进的开源数据库,9.6最新版本由PostgreSQL全球开发者今天发布。
此版本将允许用户纵向扩展(scale-up)和横向扩展(scale-out)来提高数据库的查询性能。
新功能包括并行查询、同步复制改进、短语搜索、
性能和易用性方面的改进,并提供了其他许多方面的功能。

Oracle_fdw是PG的一个外部数据接口,可以使PostgreSQL轻松跨库操作Oracle。Oracle_fdw的作用有以下两点:

纵向扩展的并行查询

9.6版本现支持一些并行查询操作,因而能够利用服务器上的几个或所有的CPU内核来进行运算,这样返回查询结果更快。
此版本的并行功能包括并行顺序表扫描、聚合和联接。根据详细信息和可用内核,并行性可以加快大数据查询,最快时可高达32倍。

Synthetic Genomics的首席数据库架构师Mike Sofen表示,
“我们将我们整个基因组数据平台–250亿行旧的MySQL数据迁移到一个Postgres数据库,
利用了 JSONB 数据类型的行压缩功能,以及优秀的GIN,BRIN和B-Tree索引模式。
期待在9.6版本中,利用并行查询功能,在我们查询大表数据时,拥有更强劲的伸缩性,更优的查询性能”

  • PG可以跨库增删改查Oracle中的表,可以查询Oracle的视图,可以使PG中的表和Oracle中表/视图作Join查询,类似dblink的功能。
  • 快速将Oralce表迁移进入PostgreSQL。
    本文简单介绍下Oracle_fdw的安装和使用。

澳门新葡亰网址下载 1

横向扩展的同步复制与postgres_fdw

PostgreSQL的同步复制功能,添加了两个选项,使它能够用于数据库集群一致读取维护。
首先,它现在允许配置一组的同步的复制数据库。
第二,“remote_apply”模式创建多个跨数据节点的一致的读视图。
这些功能使用内置的复制来维护一组的“相同的”节点实现,可以用于数据库的读负载均衡。

postgres_fdw(PostgreSQL-to-PostgreSQL数据外部表驱动程序)提供了新的功能,
支持在远程服务器上执行操作。 通过“下推”(Push
Down)排序(sort),Join联接,批量数据更新(update)任务,
用户可以调度多个PostgreSQL服务器来完成数据查询。
这些功能很快会添加到其他fdw模块中。

Equnix商务解决方案主管Julyanto Sutandang表示,
“fdw支持远程联接,更新和删除的功能,是当下其他数据库和
PostgreSQL共享数据的完整解决方案。
比如,PostgreSQL可以实现所录入的数据保存到两个或多个不同类型的数据库的功能”

一 Oracle_fdw安装

官方地址:http://pgxn.org/dist/oracle_fdw/
,选择一个版本下载。

前段时间新的重大版本的 PostgreSQL 10 发布了!
强烈建议阅读公告、发布说明和“新功能”概述可以在这里、这里和这里。像往常一样,已经有相当多的博客覆盖了所有新的东西,但我猜每个人都有自己认为重要的角度,所以与
9.6 版一样我再次在这里列出我印象中最有趣/相关的功能。

更好的文本短语搜索

PostgreSQL的全文搜索功能,现在支持短语搜索。
这允许用户搜索精确的短语,或是搜索有一定相似性的短语,
使用快速的GIN索引中的单词,结合可精细调整的文本搜索选项的新功能,
PostgreSQL是“混合搜索”的超优选择,集成了关系表,JSON和全文的搜索支持。

1.1 安装Oracle Instant Client

从oralce官网下载
‘Basic’ and ‘SDK’,假如下载后文件所在位置在/opt/oracle中。

cd /opt/oracle
unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip
mv instantclient_12_2 instantclient
cd instantclient
#建立一下软连接
ln -s libclntsh.so.12.1 libclntsh.so
#设置环境变量
vi /etc/profile
#边界内容如下:
#oracle_home一定要写,否则编译会报错
export ORACLE_HOME=/opt/oracle/instantclient
export OCI_LIB_DIR=$ORACLE_HOME
export OCI_INC_DIR=$ORACLE_HOME/sdk/include
#保存退出
#重启用profile文件
source /etc/profile

与往常一样,升级或初始化一个新集群的用户将获得更好的性能(例如,更好的并行索引扫描、合并
join 和不相关的子查询,更快的聚合、远程服务器上更加智能的 join
和聚合),这些都开箱即用,但本文中我想讲一些不能开箱即用,实际上你需要采取一些步骤才能从中获益的内容。下面重点展示的功能是从
DBA 的角度来汇编的,很快也有一篇文章从开发者的角度讲述更改。

更畅、更快和更易使用

感谢大批PostgreSQL
用户使用他们的包含大量数据生产数据库来进行PostgreSQL的反馈和测试,
这个版本包括了大量有关性能提升和可用性等方面的内容。复制、聚合、索引、
排序和存储过程变得更加高效,
在新的Linux内核上,PostgreSQL现在可以可以更好的利用资源,降低了大型表查询和复杂查询的系统负载,
尤其是VACUUM的改进。

1.2 编译oracle_fdw

启用postgres用户环境变量

[root@bogon opt]# source /home/postgres/.bashrc

解压oracle_fdw

[root@bogon opt]# unzip oracle_fdw-1.5.0.zip 

编译安装oracle_fdw

[root@bogon opt]# cd oracle_fdw-1.5.0
#编译
[root@bogon oracle_fdw-1.5.0]# make
#安装
[root@bogon oracle_fdw-1.5.0]# make install

没报错的话,代表安装成功了,有时候会报一找不到.h头文件的错误,比如:

fatal err:oci.h:No such file or directory
#或者
fatal err:stdio.h:No such file or directory

澳门新葡亰网址下载 2

错误截图1.png

都证明ORACLE_HOME没指定或没有正确配置,需检查环境变量及其文件对应是否正确。

升级注意事项

其他功能

9.6版本累计近一年来的很多新特性,主要包括︰

  • 新的系统视图和函数:pg_stat_wal_receiver,pg_visbility,pg_config,pg_blocking_pids,pg_notification_queue_usage

  • 支持命令执行进度状态报告

  • 支持级联操作(需安装扩展模块实现)

  • 支持pg_basebackup的并发

  • 逻辑复制插槽

  • 等待事件支持

  • 在psql中编辑视图和crosstabs

  • 用户定义旧快照过期

  • 只扫描局部索引

此外,这一版本改进并优化了热备流复制的API。
这样,开发人员可以用自定义的备份工具测试PostgreSQL新版本。
更多详细信息,请参阅完整发布说明。

二 创建oracle_fdw扩展

postgres=# create extension oracle_fdw;
CREATE EXTENSION

代表创建成功,如果遇到下面这个问题:

postgres=# create extension oracle_fdw;
ERROR:  could not load library "/home/postgres/lib/oracle_fdw.so": libclntsh.so: cannot open shared object file: No such file or directory

是缺少so文件了,有时候编译成功了,还是会缺不少文件,用ldd查看下oracle_fdw.so的依赖:

[postgres@localhost lib]$ ldd oracle_fdw.so 
    linux-vdso.so.1 =>  (0x00007fff5973b000)
    libclntsh.so.12.1 => not found
    libc.so.6 => /lib64/libc.so.6 (0x00007fa9c8185000)
    libmql1.so => not found
    libipc1.so => not found
    libnnz12.so => not found
    libons.so => not found
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fa9c7f6d000)
    libm.so.6 => /lib64/libm.so.6 (0x00007fa9c7c6b000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa9c7a4f000)
    libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fa9c7835000)
    librt.so.1 => /lib64/librt.so.1 (0x00007fa9c762d000)
    libaio.so.1 => /lib64/libaio.so.1 (0x00007fa9c742b000)
    libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fa9c7210000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fa9cc20e000)
    libclntshcore.so.12.1 => not found
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fa9c6ffa000)

对于这些not
found的so文件,我们在ORACLE_HOME目录中发现是存在的,如下图:

澳门新葡亰网址下载 3

ORACLE_HOME.png

因此需要手动建立一下软连接:

ln -s /opt/oracle/instantclient/libclntsh.so.12.1  /home/postgres/lib/libclntsh.so.12.1
ln -s /opt/oracle/instantclient/libmql1.so  /home/postgres/lib/libmql1.so
ln -s /opt/oracle/instantclient/libipc1.so  /home/postgres/lib/libipc1.so
ln -s /opt/oracle/instantclient/libnnz12.so  /home/postgres/lib/libnnz12.so
ln -s /opt/oracle/instantclient/libons.so  /home/postgres/lib/libons.so
ln -s /opt/oracle/instantclient/libclntshcore.so.12.1  /home/postgres/lib/libclntshcore.so.12.1

再次创建oracle_fdw:

postgres=# create extension oracle_fdw;
CREATE EXTENSION

应该就能创建成功了。

首先有些从现有设置升级的提示 – 有一些小的事情会导致从 9.6
或更旧的版本迁移时引起问题,所以在真正的升级之前,一定要在单独的副本上测试升级,并遍历发行说明中所有可能的问题。最值得注意的缺陷是:

链接:

  • 下载

  • 发布说明

  • 9.6新特性维基

  • 9.6特性宣传

来自:PostgreSQL中文社区

三 使用oracle_fdw

postgres=# create server oradb_215 foreign data wrapper oracle_fdw options(dbserver '10.144.15.215:1521/mcsas');
postgres=# grant usage on foreign server oradb_215 to postgres;
postgres=# create user mapping for postgres server oradb_215 options(user 'MG_APP',password 'QWERasdf');
postgres=# create foreign table ZWGK_SJJC_FBYJ_GTSJHD123
(
  OBJ_ID  VARCHAR(42) not null,
  XLMC    VARCHAR(50),
  DYDJ    VARCHAR(50),
  GTXH    VARCHAR(50),
  SJFBHD  VARCHAR(50),
  SSBQ    VARCHAR(50),
  BNHD    VARCHAR(50),
  SSWS    VARCHAR(50),
  PMSGTID VARCHAR(150),
  PMSGTBH VARCHAR(150),
  SFCL    VARCHAR(150)
) server oradb_215 options(schema 'MG_APP',table 'ZWGK_SJJC_FBYJ_GTSJHD');
postgres=# select * from ZWGK_SJJC_FBYJ_GTSJHD123 limit 10;

这样,将oracle中MG_APP.ZWGK_SJJC_FBYJ_GTSJHD表“映射”到pg了,可以查询了。

  • 所有包含 “xlog” 的函数都被重命名为使用 “wal” 而不是 “xlog”。

四 可能遇到的错误

后一个命名可能与正常的服务器日志混淆,因此这是一个“以防万一”的更改。如果使用任何第三方备份/复制/HA
工具,请检查它们是否为最新版本。

4.1 OCIEnvCreate错误

澳门新葡亰网址下载 4

OCIEnvCreate错误.png

解决方法:

  • 1 检查 /etc/profile中ORACLE_HOME配置及其
    export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH

  • 2 检查home/postgres/.bashrc也有:
    export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH

![](https://upload-images.jianshu.io/upload_images/68979-44be4f44b32f3a6c.png)

环境变量.png
  • 3 postgres用户下检查oracle_fdw.so的执行权限:
![](https://upload-images.jianshu.io/upload_images/68979-2034ec736ba50b6e.png)

image.png



Xshell下是绿色的,要是灰色,就 chmod 777 $PGHOME/lib/oracle_fdw.so
  • 4 全部检查完毕后一定要重启pg服务。
  • 存放服务器日志(错误消息/警告等)的 pg_log 文件夹已重命名为 “log”。

4.2 client host name is not set

有时候报错:ORA-24454: client host name is not
set,这属于非主流错误,原因是本机的hosts设置问题。

澳门新葡亰网址下载 5

可能遇到的错误.png

编辑对应服务器的hosts文件:

澳门新葡亰网址下载 6

image.png

Root@后面的是服务器的名称,所以如下配置:

澳门新葡亰网址下载 7

image.png

保存退出即可解决问题。

确保验证你的日志解析或 grep 脚本(如果有)可以工作。

  • 默认情况下,查询将最多使用 2 个后台进程。

如果在 CPU 数量较少的机器上在 postgresql.conf 设置中使用默认值
10,则可能会看到资源使用率峰值,因为默认情况下并行处理已启用 –
这是一件好事,因为它应该意味着更快的查询。如果需要旧的行为,请将
max_parallel_workers_per_gather 设置为 0。

  • 默认情况下,本地主机的复制连接已启用。

为了简化测试等工作,本地主机和本地 Unix 套接字复制连接现在在
pg_hba.conf 中以“信任trust”模式启用(无密码)!因此,如果其他非 DBA
用户也可以访问真实的生产计算机,请确保更改配置。

从 DBA 的角度来看我的最爱

  • 逻辑复制

这个期待已久的功能在你只想要复制一张单独的表、部分表或者所有表时只需要简单的设置而性能损失最小,这也意味着之后主要版本可以零停机升级!历史上(需要
Postgres
9.4+),这可以通过使用第三方扩展或缓慢的基于触发器的解决方案来实现。对我而言这是
10 最好的功能。

  • 声明分区

以前管理分区的方法通过继承并创建触发器来把插入操作重新路由到正确的表中,这一点很烦人,更不用说性能的影响了。目前支持的是
“range” 和 “list” 分区方案。如果有人在某些数据库引擎中缺少 “哈希”
分区,则可以使用带表达式的 “list” 分区来实现相同的功能。

  • 可用的哈希索引

哈希索引现在是 WAL
记录的,因此是崩溃安全的,并获得了一些性能改进,对于简单的搜索,它们比在更大的数据上的标准
B 树索引快。也支持更大的索引大小。

  • 跨列优化器统计

这样的统计数据需要在一组表的列上手动创建,以指出这些值实际上是以某种方式相互依赖的。这将能够应对计划器认为返回的数据很少(概率的乘积通常会产生非常小的数字)从而导致在大量数据下性能不好的的慢查询问题(例如选择“嵌套循环”
join)。

  • 副本上的并行快照

现在可以在 pg_dump 中使用多个进程(-jobs
标志)来极大地加快备用服务器上的备份。

  • 更好地调整并行处理 worker 的行为

参考 max_parallel_workers 和
min_parallel_table_scan_size/min_parallel_index_scan_size
参数。我建议增加一点后两者的默认值(8MB、512KB)。

  • 新的内置监控角色,便于工具使用

新的角色 pg_monitor、pg_read_all_settings、pg_read_all_stats 和
pg_stat_scan_tables 能更容易进行各种监控任务 –
以前必须使用超级用户帐户或一些 SECURITY DEFINER 包装函数。

  • 用于更安全的副本生成的临时 (每个会话) 复制槽
  • 用于检查 B 树索引的有效性的一个新的 Contrib 扩展

这两个智能检查发现结构不一致和页面级校验未覆盖的内容。希望不久的将来能更加深入。

  • Psql 查询工具现在支持基本分支(if/elif/else)

例如下面的将启用具有特定版本分支(对 pg_stat*
视图等有不同列名)的单个维护/监视脚本,而不是许多版本特定的脚本。

SELECT :VERSION_NAME = '10.0' AS is_v10 gset  if :is_v10 SELECT 'yippee' AS msg; else SELECT 'time to upgrade!' AS msg; endif 

这次就这样了!当然有很多其他的东西没有列出,所以对于专职
DBA,我一定会建议你更全面地看发布记录。非常感谢那 300
多为这个版本做出贡献的人!

【编辑推荐】

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图