通过使用file_fdw扩展使得PostgreSQL能够访问外部文件系统中的数据文件,同样通过使用postgres_fdw扩展可以使得PostgreSQL能够访问外部远端的PostgreSQL数据库中的数据。视频讲解如下:
https://www.bilibili.com/video/BV1si1hYUEmH/?aid=113377070290...
下面通过具体的步骤操作来演示如何使用postgres_fdw扩展。
(1)进入PostgreSQL源码目录下的contrib/postgres_fdw目录,编译并安装postgres扩展。
cd postgresql-15.3/contrib/postgres_fdw/
make
make install
# 编译完成后,会在当前目录下生成postgres_fdw.so文件。
(2)修改postgresql.conf文件中的shared_preload_libraries参数。
shared_preload_libraries = 'file_fdw,postgres_fdw'
(3)重新启动PostgreSQL数据库实例。
bin/pg_ctl -D data/ -l logfile restart
(4)创建postgres_fdw扩展。
postgres=# create extension postgres_fdw ;
(5)查看PostgreSQL数据库中已安装的扩展。
postgres=# select * from pg_extension;
# 输出信息如下:
-[ RECORD 1 ]--+-------------
oid | 13566
extname | plpgsql
extowner | 10
extnamespace | 11
extrelocatable | f
extversion | 1.0
extconfig |
extcondition |
-[ RECORD 2 ]--+-------------
oid | 16628
extname | file_fdw
extowner | 10
extnamespace | 2200
extrelocatable | t
extversion | 1.0
extconfig |
extcondition |
-[ RECORD 3 ]--+-------------
oid | 16648
extname | postgres_fdw
extowner | 10
extnamespace | 2200
extrelocatable | t
extversion | 1.0
extconfig |
extcondition |
(6)基于postgres_fdw创建外部PostgreSQL数据库服务器对象foreign_server。
postgres=# create server foreign_server
foreign data wrapper postgres_fdw
options (host '192.168.79.178', port '5432', dbname 'scott');
# 这里的foreign_server是指定的外部服务器名称;
# host参数是远程服务器的地址,示例中为192.168.79.178;
# port 参数是远程服务器的端口,示例中为5432;
# dbname 参数是远程数据库的名称,示例中为scott。
(7)查看当前数据库中移创建的外部服务。
postgres=# \des
# 输出的信息如下:
List of foreign servers
-[ RECORD 1 ]--------+---------------
Name | foreign_server
Owner | postgres
Foreign-data wrapper | postgres_fdw
-[ RECORD 2 ]--------+---------------
Name | service_file
Owner | postgres
Foreign-data wrapper | file_fdw
(8)创建用户映射。
postgres=# create user mapping for postgres
server foreign_server
options (user 'postgres', password 'Welcome_1');
# 该语句为本地postgres用户创建了一个
# 访问远程服务器foreign_server时的用户映射,
# 也就是使用用户名postgres和密码Welcome_1连接远程服务器。
(9)创建外部表。
postgres=# create foreign table ft_dept
(deptno int,
dname varchar(10),
loc varchar(10))
server foreign_server
options (schema_name 'public', table_name 'dept');
(10)现在可以在本地数据库中通过外部表访问对应的远程表。
postgres=# select * from ft_dept;
# 输出的信息如下:
deptno | dname | loc
--------+------------+----------
10 | ACCOUNTING | NEW YORK
20 | RESEARCH | DALLAS
30 | SALES | CHICAGO
40 | OPERATIONS | BOSTON
(4 rows)
注意:为了能够在本地访问远端的PostgreSQL数据库服务器,需要修改远端PostgreSQL数据库服务器的postgresql.conf和pg_hba.conf配置文件,以允许远程登录访问。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。