如何实现两个内网间的访问_如何实现Postgres访问TiDB

本文介绍了如何在macOS上通过HomeBrew安装Postgres和MySQLFDW,然后利用MySQLFDW插件实现Postgres访问TiDB(通过MySQL协议)。详细步骤包括安装、配置、创建服务器对象、用户映射、外部表,并演示了查询、插入、更新和删除数据的操作。在遇到TiDB不支持添加主键的问题时,给出了解决方案。
摘要由CSDN通过智能技术生成

5a2abc5f3f6d4db9372af81dcd44afa5.png
如何实现Postgres访问TiDB​mp.weixin.qq.com
66e7558cbbd9696d840e8a558c22d29c.png

TiDB支持MySQL,Spark,但不支持Postgres, 那有没有办法实现Postgres访问呢?

现在尝试一个曲线救国的办法, MySQL FDW(mysql_fdw)。

利用mysql_fdw插件,可以读写MySQL数据库里的数据。

具体环境参考极速体验TiSpark。

安装HomeBrew

今天尝试的是在macOS下大名鼎鼎的HomeBrew(也支持Linux)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

安装并运行Postgres

brew install postgresql
pg_ctl -D /home/linuxbrew/.linuxbrew/var/postgres start

安装MySQL FDW

git clone https://github.com/EnterpriseDB/mysql_fdw

cd mysql_fdw

#通过brew安装,pg_config配置里需要gcc-5
ln -s /bin/gcc-9 gcc-5

export PATH=.:/home/linuxbrew/.linuxbrew/bin:$PATH
make USE_PGXS=1
make USE_PGXS=1 install
cd ..

Postgres客户端

可以用psql,不过我还是愿意用pgweb(具体介绍详见推荐一个Postgres Web客户端,免安装跨平台还开源)

#下载pgweb,解压缩
wget https://github.com/sosedoff/pgweb/releases/download/v0.11.6/pgweb_linux_amd64.zip &&
unzip pgweb_linux_amd64.zip && 
rm pgweb_linux_amd64.zip

#PGHOSTADDR 变量会导致b报错,删除它
export -n PGHOSTADDR

#运行pgweb
./pgweb_linux_amd64 --url=postgres://postgres:@127.0.0.1/postgres?sslmode=disable

测试下MySQL FDW

  • mysql_fdw安装好后,第一次需要加载
-- load extension first time after install安装插件
CREATE EXTENSION mysql_fdw;
  • 与MySQL(TiDB)建立连接
-- create server object创建MySQL Server对象
CREATE SERVER mysql_server
  FOREIGN DATA WRAPPER mysql_fdw
  OPTIONS (host '127.0.0.1', port '4000');

-- create user mapping创建用户映射
CREATE USER MAPPING FOR gitpod
  SERVER mysql_server
  OPTIONS (username 'root', password '');
  • 创建外部表
-- create foreign table
CREATE FOREIGN TABLE "NATION" (
  "N_NATIONKEY" int NOT NULL,
  "N_NAME" char(25) NOT NULL,
  "N_REGIONKEY" int NOT NULL,
  "N_COMMENT" varchar(152) DEFAULT NULL
) SERVER mysql_server
  OPTIONS (dbname 'TPCH_001', table_name 'NATION');
  • 查询
select * from "NATION" limit 10;
  • 插入数据
insert into  "NATION"("N_NATIONKEY","N_NAME","N_REGIONKEY","N_COMMENT") 
values (25,'PG',0,'TiDB 测试');

报错

ERROR: pq: first column of remote table must be unique for INSERT/UPDATE/DELETE operation

因为MySQL里的NATION表没有键值,解决办法

mysql>alter table NATION add primary key(N_NATIONKEY);

默认运行TiDB时报错如下,

ERROR 8200 (HY000): Unsupported add primary key, alter-primary-key is false

因为TiDB-Server默认alter-primary-key 为false,需要修改配置文件,设置为true。

再测试新增数据,成功。

  • 更新数据
update "NATION" set "N_NAME"='MySQL FDW' 
where "N_NATIONKEY"=25;
  • 删除数据
delete from  "NATION" where "N_NATIONKEY"=25;

TiDB系列

  • TiDB安装与体验
  • 安装WordPress
  • Matomo
  • 极速体验TiSpark

参考

  • https://docs.pingcap.com/zh/tidb/dev/tidb-configuration-file
  • https://github.com/EnterpriseDB/mysql_fdw
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值