Kingbase_FDW 使用介紹


 與postgresql_fdw功能類似,KINGBASE_FDW  是一種外部訪問接口,它可以被用來訪問存儲在外部的數據。想要使用fdw訪問數據需要先確保:網絡通,數據庫訪問配置(pg_hba,conf)正常,同時遠端數據庫的用戶必須有表的相關權限。

一、遠程數據庫

遠程數據庫 IP: 142 。創建用戶及測試數據:

create role user_remote with login;
alter role user_remote with password 'user_remote';
create schema user_remote authorization user_remote;
\c test user_remote
create table t1(id integer,name varchar(9));
insert into t1 values(1,'a'),(2,'b');

二、本地數據庫

本地數據庫 IP: 143 

1、創建擴展 kingbase_fdw

\c test system
create role user_local with login;
alter role user_local with password 'user_local';
create schema user_local authorization user_local;
create extension kingbase_fdw;

擴展創建完成后,pg_foreign_data_wrapper 有如下一行:

test=# select * from pg_foreign_data_wrapper where fdwname='kingbase_fdw';
  oid  |   fdwname    | fdwowner | fdwhandler | fdwvalidator | fdwacl | fdwoptions 
-------+--------------+----------+------------+--------------+--------+------------
 16495 | kingbase_fdw |       10 |      16493 |        16494 |        | 
(1 row)

2、create server

create server srv_42 foreign data wrapper kingbase_fdw options(host '192.168.237.42',port '54321',dbname 'test');
grant usage on foreign server srv_42 to user_local;

注意:必須將 Server 授權給用戶,否則用戶在創建外部表時,會報“ERROR:  permission denied for foreign server srv_42” 錯誤。創建完server后,在sys_foreign_server 會有如下一條:

test=> select * from sys_foreign_server where srvname='srv_42';
  oid  | srvname | srvowner | srvfdw | srvtype | srvversion |                srvacl                 |                  srvoptions                  
-------+---------+----------+--------+---------+------------+---------------------------------------+----------------------------------------------
 16502 | srv_42  |       10 |  16495 |         |            | {system=U/system,user_local=U/system} | {host=192.168.237.42,port=54321,dbname=test}
(1 row)

3、創建user mapping

create user mapping for user_local server srv_42 options(user 'user_remote',password 'user_remote');

創建后,在pg_user_mappings 會有一條記錄:

test=> select * from pg_user_mappings where srvname='srv_42'; 
 umid  | srvid | srvname | umuser |  usename   |                umoptions                
-------+-------+---------+--------+------------+-----------------------------------------
 16503 | 16502 | srv_42  |  16500 | user_local | {user=user_remote,password=user_remote}

4、創建外部表

create foreign table ft_t1 (
	id integer , 
	name varchar(9)
) server srv_42 options (schema_name 'user_remote',table_name 't1');

5、訪問測試

test=> \d
                List of relations
   Schema   | Name  |     Type      |   Owner    
------------+-------+---------------+------------
 user_local | ft_t1 | foreign table | user_local
(1 row)

test=> select * from ft_t1;    
 id |   name    
----+-----------
  1 | a        
  2 | b        
(2 rows)

6、選擇導入遠程的整個schema

可以將遠程schema下的所有表及視圖通過import 方式導入,避免逐表創建。

test=> import foreign schema user_remote from server srv_42 into user_local;
IMPORT FOREIGN SCHEMA
test=> \d
               List of relations
   Schema   | Name |     Type      |   Owner    
------------+------+---------------+------------
 user_local | t1   | foreign table | user_local
 user_local | t2   | foreign table | user_local

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM