news 2026/7/22 4:13:08

\des Postgres oracle dblink 互联

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
\des Postgres oracle dblink 互联


使用Oracle_FDW实现Postgres连接Oracle

Oracle_fdw的编译依赖系统中需要有pg_config和Oracle的环境,需要安装oracle客户端。

1、安装客户端需要如下3个文件包
unzip instantclient-basic-linux.x64-12.2.0.1.0.zip

unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip

unzip instantclient-sqlplus-linux.x64-12.2.0.1.0.zip

2、配置环境变量
export ORACLE_HOME=/opt/oracle/instantclient

export OCI_LIB_DIR=$ORACLE_HOME

export OCI_INC_DIR=$ORACLE_HOME/sdk/include

export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH

3、下载oracle_fdw插件并安装
unzip oracle_fdw-2.0.0.zip

cd oracle_fdw-2.0.0

Make

Make install

--检查确认没有依赖未解决

ldd oracle_fdw.so

4、创建拓展
postgres=# create extension oracle_fdw ;

postgres=# \des

List of foreign servers

Name | Owner | Foreign-data wrapper

-------+----------+----------------------

oradb | postgres | oracle_fdw

5、创建外部数据源服务
postgres=# CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '// xx:xx1521/posdb');

6、建用户映射
postgres=# CREATE USER MAPPING FOR postgres SERVER oradb OPTIONS (user ' ', password ' ');

7、创建外部表
postgres=# CREATE FOREIGN TABLE "xx" (

id int,

uuid character(32),

name character(32),

Minfo text) SERVER oradb OPTIONS (table 'xx');

8、测试访问速度
测试结果:

1、使用postgres连接oracle查询2G的表,4520万行数据,全表扫描耗时9分钟23秒。

select * from xx;

Time: 563775.627 ms (09:23.776)

2、建表时加入prefetch'10240' 参数后耗时5分22秒。

select * from xx;

Time: 322470.280 ms (05:22.470)

[
PostgreSQL连接PostgreSQL
]
使用Postgres_FDW实现Postgresql连接Postgresql

Postgres_FDW为postgresql自带拓展可以直接创建。支持远程select和DML,和本地表操作一样。

1、创建拓展
postgres=# create extension postgres_fdw;

2、创建服务
postgres=# create server f_postgres foreign data wrapper postgres_fdw options (host 'xx',port 'xx',dbname 'xx');

3、创建用户映射
postgres=# create user mapping if not exists for postgres server f_postgres options (user 'xx',password 'xx');

4、创建外部表
postgres=# CREATE FOREIGN TABLE "xx" (

id int,

uuid character(32),

name character(32),

Minfo text) SERVER f_postgres OPTIONS (table_name 'xx');

5、测试访问速度
测试结果:

1、使用postgres连接postgres查询2G的表,4520万行数据,全表扫描耗时12分钟59秒。

select * from vol_audit_nbr_sum_qs;

Time: 779932.685 ms (12:59.933)

2、建表时加入fetch_size'10240' 参数后耗时3分58秒。

select * from xx;

Time: 238503.016 ms (03:58.503)

[
Oracle连接PostgreSQL
]
1、安装postgresql的odbc驱动包
--需要安装unixODBC 和 postgresql_odbc

yum install -y unixODBC.x86_64

yum install -y postgresql-odbc.x86_64

2、配置/etc/odbc.ini

[postgresql]

Description = PostgresSQLODBC

Driver = PostgreSQL

Database = testdb

Servername = xx

UserName = test

Password = test123

Port = 5432

ReadOnly = 0

ConnSettings = set client_encoding to UTF8

连接成功:

[root@localoracle ~]# isql postgresql

+---------------------------------------+

| Connected! |

| |

| sql-statement |

| help [tablename] |

| quit |

| |

+---------------------------------------+

3、创建.odbc.ini文件
在/home/oracle下创建隐藏文件.odbc.ini

[PG_LINK]

Description = PostgreSQL connection to SallyDB

Driver = usr/lib64/psqlodbc.so

Setup = usr/lib64/libodbcpsqlS.so

Database = testdb

Servername = xx

UserName = test

Password = test123

Port = 5432

Protocol = 12.2

ReadOnly = No

RowVersioning = No

ShowSystemTables = No

ConnSettings = set client_encoding to UTF8

4、配置透明网关

在$ORACLE_HOME/network/admin/下面创建initPG_LINK.ora文件,这个文件名字中的PG_LINK是上面自定义的名字

HS_FDS_CONNECT_INFO = PG_LINK

HS_FDS_TRACE_LEVEL = 255

HS_FDS_SHAREABLE_NAME=/usr/lib64/psqlodbc.so

HS_LANGUAGE=AMERICAN_AMERICA.ZHS16GBK

set ODBCINI=/home/oracle/.odbc.ini

5、配置tnsnames.ora文件
PG_LINK =

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=xx)(PORT=1521))

(CONNECT_DATA=(SID=PG_LINK))

(HS=OK)

)

6、配置监听文件
SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SID_NAME=PG_LINK)

(ORACLE_HOME=/u01/app/oracle/product/12.2/db_1) (ENV="LD_LIBRARY_PATH=/usr/lib64/:/u01/app/oracle/product/12.2/db_1/bin/") (PROGRAM=dg4odbc)

)

)

7、创建DBLINK

create database link to_pglink connect to "test" identified by "test123" using 'PG_LINK';

8、访问PG数据库
访问postgre的数据库表是需要表名字小写并加上双引号

select count(*) from "xx"@to_pglink;

9、测试访问速度
测试结果:

使用oracle连接postgres查询2G的表,4520万行数据,全表扫描耗时10分钟37秒。

SQL> set timing on

SQL> set autot trace

SQL> select "xx" from "xx"@to_pglink;

45201535 rows selected.

Elapsed: 00:10:37.14

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 4:12:28

Airflow SubDAG触发机制缺陷分析与修复方案

1. 问题现象与背景分析在Airflow工作流中遇到"Duplicate entry xxxx for key dag_id"错误时,通常发生在多层嵌套的SubDAG触发场景。这个错误表面上看是数据库主键冲突,但背后反映的是Airflow对SubDAG触发机制的缺陷。典型错误日志如下&#xf…

作者头像 李华
网站建设 2026/7/22 4:09:58

5步搭建开源付费墙绕过系统:技术原理与实战部署指南

5步搭建开源付费墙绕过系统:技术原理与实战部署指南 【免费下载链接】13ft My own custom 12ft.io replacement 项目地址: https://gitcode.com/GitHub_Trending/13/13ft 在数字内容日益商业化的今天,付费墙已成为众多高质量内容平台的标配。对于…

作者头像 李华
网站建设 2026/7/22 4:09:13

基于深度学习的肺炎X光片自动检测系统设计与实现

1. 项目背景与核心价值肺炎作为全球范围内的高发呼吸道疾病,早期准确诊断对临床治疗至关重要。传统X光片诊断依赖放射科医师经验,存在主观性强、效率低下等问题。我们团队开发的基于深度神经网络的肺炎检测系统,通过卷积神经网络(…

作者头像 李华
网站建设 2026/7/22 4:07:24

外泌体研究:从“细胞垃圾”到精准医学新载体的认知革命

简述 外泌体作为细胞主动分泌的纳米级囊泡,携带着核酸、蛋白质及脂质等丰富内含物,在细胞间通讯、肿瘤微环境重塑及疾病诊断中发挥关键作用。本文系统梳理外泌体的发现历程、生物学特征、功能机制及其在液体活检、药物递送和治疗干预三大方向的研究进展&…

作者头像 李华