PostgreSQL外部表postgres_fdw

作者:瀚高PG实验室 (Highgo PG Lab)- 徐云鹤
本文简单探讨下PostgreSQL外部表postgres_fdw。
添加extension。

highgo=# create extension postgres_fdw ;           
CREATE EXTENSION
highgo=# \dx
                               List of installed extensions
     Name     | Version |   Schema   |                    Description                     
--------------+---------+------------+----------------------------------------------------
 plpgsql      | 1.0     | pg_catalog | PL/pgSQL procedural language
 postgres_fdw | 1.0     | public     | foreign-data wrapper for remote PostgreSQL servers
(2 rows)

创建远端数据库。

highgo=# create database dblink TEMPLATE template0;
CREATE DATABASE

本地创建server。

highgo=# select * from pg_foreign_data_wrapper;
   fdwname    | fdwowner | fdwhandler | fdwvalidator | fdwacl | fdwoptions
--------------+----------+------------+--------------+--------+------------
 postgres_fdw |       10 |      24582 |        24583 |        |
(1 row)
highgo=# create server server_remote_dblink foreign data wrapper postgres_fdw options(host '127.0.0.1',port '5866',dbname 'highgo');
CREATE SERVER
highgo=#  select * from pg_foreign_server ;
       srvname        | srvowner | srvfdw | srvtype | srvversion | srvacl |                srvoptions               
----------------------+----------+--------+---------+------------+--------+------------------------------------------
 server_remote_dblink |       10 |  24584 |         |            |        | {host=127.0.0.1,port=5866,dbname=highgo}
(1 row)

highgo=# \des
               List of foreign servers
         Name         | Owner  | Foreign-data wrapper
----------------------+--------+----------------------
 server_remote_dblink | highgo | postgres_fdw
(1 row)

创建用户匹配信息

highgo=# create user mapping for highgo server server_remote_dblink options(user 'highgo',password 'highgo');
CREATE USER MAPPING
highgo=#  select * from pg_user_mappings;
 umid  | srvid |       srvname        | umuser | usename |            umoptions             
-------+-------+----------------------+--------+---------+----------------------------------
 24592 | 24591 | server_remote_dblink |     10 | highgo  | {user=highgo,password=highgo123}
(1 row)

创建外部表。

highgo=# CREATE FOREIGN TABLE bb(name char(2)) server server_remote_dblink options (schema_name 'public',table_name 'aa');
CREATE FOREIGN TABLE
highgo=# select * from bb;
 name
------
(0 rows)

在dblink库里插一条数据后再次查询。

highgo=# select * from bb;
  name 
--------
 信息
(1 row)

查看类型。

highgo=# \d
               List of relations
     Schema     | Name |     Type      | Owner 
----------------+------+---------------+--------
 oracle_catalog | dual | view          | highgo
 public         | a    | table         | highgo
 public         | bb   | foreign table | highgo
(3 rows)

删除外部表。

highgo=# DROP FOREIGN TABLE bb;
DROP FOREIGN TABLE

导入整个schema下的所有表。

highgo=# grant all on foreign server server_remote_dblink to highgo;
GRANT

highgo=# IMPORT FOREIGN SCHEMA public FROM SERVER server_remote_dblink into public;
IMPORT FOREIGN SCHEMA
highgo=# \d
               List of relations
     Schema     | Name |     Type      | Owner 
----------------+------+---------------+--------
 oracle_catalog | dual | view          | highgo
 public         | a    | table         | highgo
 public         | aa   | foreign table | highgo
(3 rows)

如果远端的表有drop或者create,在本地不会同步更新。
所以如果远端删除了表,再通过外部表查询,会提示不存在。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值