1 E100 fdw
+----
| User
|
- 定义外表
-- \c atlasdb
-- ALTER SYSTEM SET password_encryption = 'scram-sha-256';
-- SELECT pg_reload_conf();
-- SHOW password_encryption;
-- 外部数据库:fdb1
CREATE DATABASE fdb1;
CREATE USER fu1 PASSWORd 'QAZ2wsx@123';
\c fdb1
set role fu1;
CREATE TABLE ft1 (c1 INT);
INSERT INTO ft1 VALUES (11);
reset role;
-- 配置本地数据库
\c atlasdb
CREATE EXTENSION postgres_fdw;
CREATE USER u1 PASSWORD 'u1.password';
CREATE SERVER s1 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '172.16.100.134', port '5432', dbname 'fdb1');
GRANT ALL ON FOREIGN SERVER s1 TO u1;
set role u1;
CREATE FOREIGN TABLE t1 (c1 INT) SERVER s1 OPTIONS (schema_name 'public', table_name 'ft1');
CREATE USER MAPPING FOR u1 SERVER s1 OPTIONS (user 'fu1', password 'QAZ2wsx@123');
-- 配置远程登录
echo 'host all u1 0.0.0.0/0 md5' >> $PG_HOME/data/atlasdb_hba.conf
echo 'host all fu1 0.0.0.0/0 md5' >> $PG_HOME/data/atlasdb_hba.conf
echo "listen_addresses='0.0.0.0'" >> $PG_HOME/data/atlasdb.conf
pstop
pstart
-- 访问外表
set role u1;
SELECT * FROM t1;
SELECT * FROM pg_user_mapping;
-- clean
DROP SERVER s1 CASCADE;
DROP USER u1;
DROP DATABASE fdb1;
DROP USER fu1;
2 G100 fdw
安装外部集群
# 1. 安装外部集群,设置端口为6432 # 2. 创建数据库、用户、表 vsql -d postgres -p 6432 -c "CREATE DATABASE fdb1;" vsql -d postgres -p 6432 -c "CREATE USER fu1 PASSWORd 'fu1.password'; " vsql -d fdb1 -p 6432 -c "CREATE TABLE ft1 (c1 INT); INSERT INTO ft1 VALUES (11); "集群创建关联
-- 1. 安装集群,该设置端口为5432(通过fdw从该集群访问外部集群) -- 2. 安装插件 \c vastbase CREATE EXTENSION postgres_fdw; -- 3. 生成访问外部服务器的密码 \! gs_guc generate -S 'fu1.password' -D $GAUSSHOME/bin -o usermapping -- 3. 创建外部服务器 CREATE PUBLIC DATABASE LINK flink CONNECT TO fu1 IDENTIFIED BY 'fu1.password' USING postgres_fdw(host 'localhost', port '6432', dbname 'fdb'); -- 4. 尝试访问外部服务器(报错没权限正常,因为fu1本就无权限访问ft1) SELECT * FROM ft1@flink; -- 5. 创建用户 CREATE USER u1 PASSWORD 'u1.password'; CREATE USER u2 PASSWORD 'u1.password'; -- 使用u1查询 SET ROLE u1 PASSWORD 'u1.password'; SELECT count(*) FROM information_schema.columns@flink;其他操作
-- 使用u2查询 SET ROLE u2 PASSWORD 'u2.password'; SELECT count(*) FROM information_schema.columns@flink; -- 6 查看dblink相关信息 SELECT oid,* FROM pg_foreign_data_wrapper; SELECT oid,* FROM pg_foreign_server; SELECT oid,* FROM pg_user_mapping; SELECT *,ftrelid::regclass FROM pg_foreign_table; -- 清理 DROP EXTENSION postgres_fdw CASCADE; DROP USER u1; DROP USER u2;
PostgresMain
exec_simple_query
pg_analyze_and_rewrite
parser_analzye
transformTopLevelStmt
taransfromStmt
transformSelectStlt
transformFromClause
transformTableEntry
parserOpenTable
dblinkTableHandle
execute_sql_string('create schema vbdbkinl_pub....; grant all on schemma vbdblinkpub... to public; alter default privileges in schema vbdblinkpub...')
exec_simple_query
PortalStart
standatd_ExecutorStart
InitPlan
ExecInitNode
ExecInitForeignScan
postgresBeginForeignScan
GetUserMapping
SearchSysCache('pg_user_mapping')
decryptUserMapping
GetConnection
connect_pg_server