(三)postgresql外部数据包装器

It is better to be clear than to be clever

本篇测试一下postgres_fdw

1、postgres_fdw理解

    fdw是foreign-data wrapper的一个简称,可以叫外部封装数据。

    postgres_fdw 是用于postgresql的数据库之间连接,原因是postgresql不能直接跨库访问,被设计用来替代dblink。

2、进入psql

    进入后一路回车,输入password(123456),进入pg的命令行。

    介绍一下pg的官方文档,网址如下

    https://www.postgresql.org/docs/

    可以直接搜索你想用的。

3、create extension创建扩展

    先\h create extension,可以在命令行中看怎么用,也可以在官方文档看详细的用法。

    详细的用法就不再赘述了,直接

    create extension postgres_fdw

    就可以了。

    这样其实有一点不太好,前面回车过去的server、database选项,不能修改了。

    那就还是放在anaconda上去运行吧!

    上代码。

import psycopg2

conn = psycopg2.connect(
    database = 'test',
    user = 'postgres',
    password = '123456',
    host = '127.0.0.1',
    port = 5432
)

curs = conn.cursor()
curs.execute(
    '''
    create extension postgres_fdw;
    '''
)
conn.commit()
conn.close()

    这样就建立了postgres_fdw的扩展。

    这里有一个问题,似乎扩展名必须为postgres_fdw,否则就会报错。

    错误为ERROR:  could not open extension control file "C:/ProgramFiles/PostgreSQL/10/share/extension/guiheng_fdw.control": No such file or directory

    进入这个文件夹,才发现,必须使用以control为扩展名的才能创建扩展,也是有很多个的,不能自己随便起。

    可以看到已经创建了扩展。

4、create server创建外部(远程)服务器

    后面就不再配图表示了,很好理解。

    代码把执行换成如下就行了。

    create server diwuheng_server foreign data wrapper postgres_fdw options (host '127.0.0.1', port '5432', dbname 'new');

    分析一下这行代码。

    diwuheng_server 外部服务器名称,自己起的;

    参数:

    host '127.0.0.1‘  因为还是在本机上跑,所以只能是本机的localhost,当然,要是接外部设备的数据库,应该是外部设备的IP;

    port 端口号

    dbname 创建的外部数据表名。

5、创建用户匹配信息(用户映射)

    执行行如下:

    postgres=# create user mapping for postgres server diwuheng_server options(user 'postgres',password '123456');

    for后面跟的是本地登录执行的用户名。注意不是数据库名test。

    参数:

    user 用户名

    password 密码

    可以随便设置,但是好像查询的时候会出问题,所以谨慎起见,就设为如上所示。

6、创建外部表

    参考官方文档,代码如下

import psycopg2

conn = psycopg2.connect(
    database = 'test',
    user = 'postgres',
    password = '123456',
    host = '127.0.0.1',
    port = 5432
)

curs = conn.cursor()
curs.execute(
    '''
    create foreign table films(
        code        char(5)     not null,
        title       varchar(40) not null,
        did         integer     not null,
        data_prod   date,
        kind        varchar(10),
        len         interval hour to minute 
    )
    server external_server;
    '''
)
conn.commit()
conn.close()

    可以看到,已经创建了外部表。

   初步试验了一下。还有很多没搞明白,后续会继续更新,加油!

    

PostgreSQL支持外部数据连接,即连接到其他数据源,例如Oracle、MySQL或SQL Server。这个功能是通过PostgreSQL的Foreign Data Wrapper (FDW)实现的。FDW允许PostgreSQL在没有复制数据的情况下查询其他数据源。 以下是使用PostgreSQL FDW连接Oracle数据库的步骤: 1.安装Oracle FDW扩展:可以使用以下命令安装FDW扩展(前提是已经安装了pg_config): ```shell $ git clone https://github.com/laurenz/oracle_fdw.git $ cd oracle_fdw $ make && make install ``` 2.创建一个数据库链接: ```sql CREATE SERVER oracle_server FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//localhost:1521/orclpdb1', dbname 'hr', oracle_home '/usr/lib/oracle/21/client64', initstmt 'ALTER SESSION SET NLS_LANGUAGE=AMERICAN'); ``` 这个命令创建了一个名为`oracle_server`的服务对象,可以使用它来连接Oracle数据库。 3.创建用户映射: ```sql CREATE USER MAPPING FOR postgres SERVER oracle_server OPTIONS (user 'hr', password 'hr'); ``` 这个命令将PostgreSQL用户`postgres`映射到Oracle的用户`hr`,并设置了`hr`的密码。 4.创建外部表: ```sql CREATE FOREIGN TABLE employees ( employee_id integer, first_name character varying, last_name character varying, email character varying, phone_number character varying, hire_date date, job_id character varying, salary numeric, commission_pct numeric, manager_id integer, department_id integer ) SERVER oracle_server OPTIONS (schema 'HR', table_name 'EMPLOYEES'); ``` 这个命令创建了一个名为`employees`的外部表,将Oracle数据库中的`HR`模式的`EMPLOYEES`表映射到了PostgreSQL上。 至此,我们就可以使用PostgreSQL命令来查询Oracle数据库中的数据了。例如,我们可以运行以下命令来获取所有员工的信息: ```sql SELECT * FROM employees; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值