Centos7下PostgreSQL file_fdw与postgres_fdw的使用

本文详细介绍如何使用file_fdw和postgres_fdw扩展在PostgreSQL中访问本地文件和远程数据库。包括扩展安装、配置及创建外部表的具体步骤,适合数据库管理员和高级用户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、file_fdw的使用

1.1、file_fdw的介绍

   file_fdw模块提供外部数据包装器file_fdw,可用于访问服务器文件系统中的数据文件,或执行服务器上的程序并读取其输出。数据文件或程序输出必须采用可以读​​取的格式COPY FROM;目前,对数据文件的访问权限是只读的。

使用此包装器创建的外表可以具有以下选项:

filename

指定要读取的文件。必须是绝对路径名。无论是filename或 program必须指定,但不能两者兼得。

program

指定要执行的命令。将读取此命令的标准输出,就像COPY FROM PROGRAM使用它一样。无论是 programfilename必须指定,但不能两者兼得。

format

指定数据格式,同样COPYFORMAT 选项。

header

指定数据是否具有标题行,相同COPYHEADER选项。

delimiter

指定数据分隔符,与COPY's DELIMITER选项相同 。

quote

指定数据引号字符,相同 COPYQUOTE选项。

escape

指定数据转义字符,相同 COPYESCAPE选项。

null

指定数据空字符串,一样COPYNULL 选择。

encoding

指定数据编码,一样COPYENCODING选择。

请注意,虽然COPY允许HEADER指定诸如没有相应值的选项,但外表选项语法要求在所有情况下都存在一个值。要激活 COPY通常没有值的选项,您可以传递值TRUE,因为所有这些选项都是布尔值。

1.2、添加file_fdw扩展。

postgres=# create extension file_fdw ;

出现上述错误,先进入文件路径/usr/pgsql-10/share/extension/, 发现下面的确没有file_fdw.control这个文件,于是怀疑是否有些相关的包文件未安装齐全,那么采取暴力一点的办法,把所有有关postgresql10的安装包全部装上,

[root@baiduyun extension]# yum install postgresql10*

安装完后,查看:

再次执行,成功

postgres=# create extension file_fdw ;

postgres=# \dx   --查看所有的外部扩展

1.3、测试file_fdw

请参考:https://blog.youkuaiyun.com/luojinbai/article/details/45673113

 

2、postgres_fdw的使用

以下是使用创建外表的示例 postgres_fdw。首先安装扩展:

CREATE EXTENSION postgres_fdw;

然后使用CREATE SERVER创建外部服务器。在这个例子中,我们希望在主机侦听端口上连接到PostgreSQL服务器。建立连接的数据库在远程服务器上命名:xxx.xx.xxx.xx5432foreign_db

CREATE SERVER foreign_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'xxx.xx.xxx.xx', port '5432', dbname 'foreign_db');

还需要使用CREATE USER MAPPING定义的用户映射,以标识将在远程服务器上使用的角色,options里是远程服务器上用户名和密码。

CREATE USER MAPPING FOR local_user
        SERVER foreign_server
        OPTIONS (user 'foreign_user', password 'password');

现在可以使用CREATE FOREIGN TABLE创建外部。在此示例中,我们希望访问some_schema.some_table远程服务器上指定的表。它的本地名称是foreign_table

CREATE FOREIGN TABLE foreign_table (
        id integer NOT NULL,
        data text
)
        SERVER foreign_server
        OPTIONS (schema_name 'some_schema', table_name 'some_table');

声明的列的数据类型和其他属性CREATE FOREIGN TABLE与实际的远程表匹配是至关重要的。列名也必须匹配,除非您将column_name选项附加到各列以显示它们在远程表中的命名方式。在许多情况下,使用IMPORT FOREIGN SCHEMA比手动构建外部表定义更可取。

参考:https://www.postgresql.org/docs/current/postgres-fdw.html

2.1、postgres_fdw的测试

请参考:https://blog.youkuaiyun.com/liyuhui195134/article/details/78972741

 

 

### ODBC_FDW 的下载、安装配置 #### 1. 下载 ODBC_FDW ODBC Foreign Data Wrapper (FDW) 是 PostgreSQL 中用于访问外部数据源的一个扩展工具。可以通过以下链接获取其官方仓库地址: GitHub 地址:https://github.com/postgres-foreign-data-wrappers/odbc_fdw 此项目提供了完整的文档以及源代码。 如果需要二进制包,则需确认操作系统版本并前往对应的软件包管理器寻找预构建的 `odbc_fdw` 软件包[^1]。 --- #### 2. 安装依赖项 在安装前,确保已安装必要的开发库和工具链: - **CentOS/RHEL**: 使用 Yum 或 DNF 来安装所需的组件。 ```bash sudo yum install postgresql-devel unixODBC unixODBC-devel gcc make ``` - **Ubuntu/Debian**: 对于基于 Debian 的发行版,可运行如下命令来准备环境。 ```bash sudo apt-get update && sudo apt-get install postgresql-server-dev-all libpq-dev unixodbc unixodbc-dev build-essential ``` 这些步骤会为后续编译提供基础支持[^3]。 --- #### 3. 编译安装 ODBC_FDW 完成上述准备工作之后,按照下面流程操作即可成功部署该 FDW 插件。 ##### 获取源码 克隆 GitHub 上的存储库到本地机器上执行下一步骤。 ```bash git clone https://github.com/postgres-foreign-data-wrappers/odbc_fdw.git cd odbc_fdw/ ``` ##### 构建插件 利用 Make 工具来进行实际编译工作。 ```bash make USE_PGXS=1 sudo make USE_PGXS=1 install ``` 这里的关键参数 `-USE_PGXS=1` 表明我们希望借助 PostgreSQL 自带的简易脚本系统 PGXS 进行自动化处理[^4]。 --- #### 4. 配置 PostgreSQL 数据库以启用 ODBC_FDW 功能 为了使新加入的功能生效,在目标数据库实例里注册这个外延模块是非常重要的一步。 登录至 PostgreSQL 命令提示符界面后输入下列指令加载所需函数定义文件。 ```sql CREATE EXTENSION IF NOT EXISTS odbc_fdw; ``` 接着创建服务器对象关联远端资源位置信息。 ```sql CREATE SERVER remote_odbc_server FOREIGN DATA WRAPPER odbc_fdw OPTIONS ( dsn 'your_dsn_name', readonly 'false' ); ``` 最后建立映射表结构以便读取具体字段内容。 ```sql CREATE FOREIGN TABLE foreign_table_name ( column1 datatype, column2 datatype, ... ) SERVER remote_odbc_server OPTIONS (table "remote_table"); ``` 以上设置完毕即代表完成了整个集成过程[^2]。 --- ### 注意事项 - 确认 ODBC 数据源名称(DSN)已在系统的全局或用户级别正确设定好。 - 测试连接可用性可通过简单的查询语句验证是否能够正常返回预期的结果集。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值