GreatSQL社区

搜索

reddey

关于学习《POSTGRESQL实战派》一书的一些心得体会(1)

reddey 已有 41 次阅读2025-5-13 15:41 |系统分类:运维实战

   

   上周三在淘宝上购买了赵渝强老师的《POSTGRESQL实战派》一书,周六下午刚好收到书籍。收到书本后,周六晚上开始按书上的内容进行实战操作。这本书不愧是实战派,不是理论派,很多内容要经过实践检验,才能得到真知识。书籍的作者在一次访谈中曾经指出里面的实践案例都是经过多次数据验证的,由此可见书本内容的可信度很高。

   我们都知道,PG支持很多数据库扩展,这些扩展大大增强了PG数据库的灵活性和兼容性。今天讲一下在PG数据库做ORACLE扩展时,遇到了的一些问题。先介绍一下我的实验环境,我的PG数据库主机IP地址:192.168.200.108,数据库版本为PG15。ORACLE数据库主机IP地址:192.168.200.51,数据库版本为19C PDB架构。由于金仓数据库和PG相仿,操作步骤如下所示:

     金仓数据库中,使用 oracle_fdw主要包括以下步骤: 1. 创建扩展(CREATE EXTENSION),需要先安装 oracle_fdw扩展;

 2. 创建服务(CREATE SERVER),创建一个外部服务器对象,用来表示想要连接的远程数据库。

3. 创建用户映射(CREATE USER MAPPING),每一个用户映射都代表着你允许一个数据库用户访问一个外部服务器。

4. 创建与访问表对应的外表(CREATE FOREIGN TABLE),然后即可通过该外表访问存储在它对应的 oracle数据库中的数据,当权限允许时,也可以使用 insert、update或者 delete语句修改远程表。

 通常建立ORACLE扩展,上面的步骤就够了。但我按书本的步骤操作时,上面三步也操作了。书本说特意的提到的关注点,也特别关注了。在创建服务和用户映射和外表时,系统也没报错,表面看来一切正常。

  但实际操作中,我遇到了两个问题。1、在PG中执行查询外部表数据时,发现外表的内容是空白的。明明源ORACLE数据库表中数据是在在的2、发现源ORACLE数据库的表中DML操作后,PG的远程表中数据没有任何变化。我们都知道ORACLE_FDW扩展,是没有增量数量更新功能的。但我只是想使用外表查询到ORACLE表的实时数据而已,不要求类似OGG的数据同步。

    先说第一个问题如何解决的,必须要把用到的实例写在ORACLE数据库的TNSNAME.ORA中,如果你用到实例名为orcl,你就把orcl写入。如果是pdb01,就把pdb01写进去。也就必须在TNSNAME.ORA中做实例解析。

  第二个问题如何解决,这个问题上周日白天做实验时,我也是一脸茫然。作者做实验时,实验能做得通,说明是没问题的,大佬是不会错的,我相信赵老师的严谨治学精神,可能是一些不为人知的细节导致我的实验失败。到底是哪些原因导致的,一时无从下手。无奈之下,我到金仓社区和墨天轮社区发帖子咨询, 有些网友建议我在PG中执行分析表命令,有些网友让我在PG中重新建立外表看一下。

   最后,我突然冒出一个想法,是不是我在ORACLE数据库上没有执行commit命令导致的。果然执行commit了,PG外表中数据马上实时显示出来了。接着我对源数据库ORALCE表中数据进行DML操作后,然后进行commit。这时发现PG外表的数据也实时更新了。

   我仔细用\echo :AUTOCOMMIT检查了PG,发现PG数据库默认是自动提交的。检查了ORACLE 19C数据库,发现O记数据库默认是自动提交是OFF的。

  总结:在学习的过程中,总会遇到各种挫折。我本人在做一些实验时,总是会遇到别人一帆风顺,自己却挫折不断。这时,我们可以向朋友圈和学习社区寻找帮助,不管网友们的帮助是不是能解决问题,但可能会给我们指明一些思路。但我们还是要发挥自己的主观性,最终要依靠自己来解决问题,毕竟“别人强不如自己强”。


评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2025-5-17 16:54 , Processed in 0.015646 second(s), 9 queries , Redis On.
返回顶部