file_fdw&postgres_fdw

数据库版本postgresql13.2

postgres_fdw方便了pg之间的访问,兼容性请参照官网:http://www.postgres.cn/docs/13/postgres-fdw.html

另外还有mysql_fdw等

file_fdw 是为了直接访问外部文件一种特性

postgres_fdw例子,这里用一台服务器测试,用户u1本地账户,test本地库;u2远程账户,test2远程库

管理员执行:

create database test;
create user u1 with password 'china'
grant all privileges on database test to u1;

create database test2;
create user u2 with password 'china'
grant all privileges on database test2 to u2;

-- 授权
alter user zeei superuser ;
grant usage on foreign data wrapper postgres_fdw to zeei;

创建远程库测试表,切换到u2用户,库test2执行:

drop table t1;
create table t1(
id serial primary key,
name varchar(50));
insert into t1(name) values('beijing');
commit;
select * from public.t1 t ;

切换用户u1和库test

create extension postgres_fdw;

CREATE SERVER pg_link FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '127.0.0.1', port '5432', dbname 'test2');
-- drop server pg_link

CREATE USER MAPPING FOR zeei
        SERVER pg_link
        OPTIONS (user 'u2', password 'china');
-- drop user mapping for zeei server pg_link;
       
CREATE FOREIGN TABLE foreign_table_t1 (
        id integer NOT NULL,
        name varchar(50)
)
        SERVER pg_link
        OPTIONS (schema_name 'public', table_name 't1');
-- drop foreign table foreign_table_t1
       
select * from foreign_table_t1;
insert into foreign_table_t1(id,name) values(2,'shanghai');
select * from foreign_table_t1;
-- 查看扩展
test=> \dx
                                    已安装扩展列表
     名称     | 版本 |  架构模式  |                        描述

--------------+------+------------+-------------------------------------------
-------
 plpgsql      | 1.0  | pg_catalog | PL/pgSQL procedural language
 postgres_fdw | 1.0  | public     | foreign-data wrapper for remote PostgreSQL
ervers
(2 行记录)

file_fdw例子:

test=> create extension file_fdw ;
CREATE EXTENSION
test=> create  table tb10(id integer,name character varying,passworld character
varying);
CREATE TABLE
test=> insert into tb10 select generate_series(1,50),'john',md5(random()::text);

INSERT 0 50
test=> copy tb10 to 'E:/test/tb10.csv';
ERROR:  could not open file "E:/test/tb10.csv" for writing: No such file or dire
ctory
提示:  COPY TO instructs the PostgreSQL server process to write a file. You may
want a client-side facility such as psql's \copy.

test=> copy tb10 to 'E:\soft\pg13\test\tb10.csv';
COPY 50
test=> create server server_file_fdw foreign data wrapper file_fdw;
CREATE SERVER
test=> create foreign table foreign_tb10 (id integer,name character varying,pas
word character varying)server server_file_fdw  options (filename 'E:\soft\pg13\
est\tb10.csv');
CREATE FOREIGN TABLE
test=> \d foreign_tb10
                引用的外部表 "public.foreign_tb10"
   栏位   |       类型        | 校对规则 | 可空的 | 预设 | FDW选项
----------+-------------------+----------+--------+------+---------
 id       | integer           |          |        |      |
 name     | character varying |          |        |      |
 password | character varying |          |        |      |
服务器 server_file_fdw
FDW选项: (filename E'E:\\soft\\pg13\\test\\tb10.csv')


test=> select * from foreign_tb10 order by id limit 10;
 id | name |             password
----+------+----------------------------------
  1 | john | 81295c8e64adf5066318b5c5fbd981b9
  2 | john | 5a61103ef2aadb800061d0f2305af0ea
  3 | john | 9511339cb9316a649cd02cd4a58d559b
  4 | john | 8413c3138760565d7618bc63fa09b2c3
  5 | john | f38c62b386abb1d478e0383199990e71
  6 | john | 11566ae5bea1fcd1955b53e95939a976
  7 | john | e4104ab9ae16983586fdad0130390a38
  8 | john | aa0d23cb19bf9c5266cffc1ba940e187
  9 | john | 5a4d1b2262eb98d5cf89bf67d7449265
 10 | john | 413c0e3ad9415901a789141bb0baa04b
(10 行记录)


test=> explain select * from foreign_tb10 order by id limit 10;
                                  QUERY PLAN
------------------------------------------------------------------------------
 Limit  (cost=3.68..3.70 rows=10 width=68)
   ->  Sort  (cost=3.68..3.73 rows=22 width=68)
         Sort Key: id
         ->  Foreign Scan on foreign_tb10  (cost=0.00..3.20 rows=22 width=68)
               Foreign File: E:\soft\pg13\test\tb10.csv
               Foreign File Size: 2091 b
(6 行记录)

中间遇到写文件权限问题,如果是linux则设置文件夹权限

chown -R postgres:postgres    xxx_path;

如果是windows则设置文件权限为everyone所有权限即可

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值