searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

teledb-x与telepg的dblink插件互连测试

2024-10-17 09:34:35
7
0

teledb-x与telepg的dblink插件互连测试

1.准备2套集群

集群1:teledb-x的分布式集群,连接地址:127.0.0.1/12121,用户名密码:tangyujie/密码

集群2:telepg的集中式集群,连接地址:127.0.0.1/1234,用户名密码:tangyujie/密码

--分布式集群teledb-x
$ ./psql -p 12121 -d postgres -W
Password:
psql (PostgreSQL 10.0 TeleDBX V6)
Type "help" for help.

postgres=# \dx
                  List of installed extensions
    Name     | Version |   Schema   |         Description          
--------------+---------+------------+------------------------------
plpgsql     | 1.0     | pg_catalog | PL/pgSQL procedural language
teledbx_core | 1.0     | public     | core module of teledbx
(2 rows)
postgres=# create table t1(id int primary key,name varchar(11));
CREATE TABLE
postgres=# insert into t1 values(1,'中国'),(2,'美国');
COPY 2
postgres=# \dt
        List of relations
Schema | Name | Type |   Owner  
--------+------+-------+-----------
public | t1   | table | tangyujie
(1 row)

--集中式集群telepg
$ ./psql -p 1234 -d postgres -W
Password:
psql (10.23)
Type "help" for help.

postgres=# create table test(id int primary key,name varchar(11));
CREATE TABLE
postgres=# insert into test values(1,'hello'),(2,'world');
INSERT 0 2
postgres=# \dt
        List of relations
Schema | Name | Type |   Owner  
--------+------+-------+-----------
public | test | table | tangyujie
(1 row)

2.分布式dblink连接到telepg

--创建插件
postgres=# create extension dblink ;
CREATE EXTENSION
postgres=# \dx
                                  List of installed extensions
    Name     | Version |   Schema   |                         Description                          
--------------+---------+------------+--------------------------------------------------------------
dblink       | 1.2     | public     | connect to other PostgreSQL databases from within a database
plpgsql     | 1.0     | pg_catalog | PL/pgSQL procedural language
teledbx_core | 1.0     | public     | core module of teledbx
(3 rows)

--创建连接: 使用dblink连接到另一个数据库,需要指定连接参数,例如主机名、端口号、用户名和密码等
postgres=# SELECT dblink_connect('dblink_name', 'dbname=postgres host=127.0.0.1 port=1234 user=tangyujie password=密码');
dblink_connect
----------------
OK
(1 row)
--查询数据
postgres=# SELECT * FROM dblink('dblink_name', 'SELECT * FROM test') AS t(id int, name text);
id | name  
----+-------
 1 | hello
 2 | world
(2 rows)

--远程表与本地表关联查询
SELECT t1.id, t1.name AS local_name, t.name AS remote_name
FROM t1
JOIN (
   SELECT * FROM dblink('dblink_name', 'SELECT id, name FROM test')
   AS t(id INT, name TEXT)
) AS t
ON t1.id = t.id;
id | local_name | remote_name
----+------------+-------------
 1 | 中国       | hello
 2 | 美国       | world
(2 rows)

--执行函数
postgres=# SELECT dblink('dblink_name', 'SELECT txid_current();');
ERROR: function returning record called in context that cannot accept type record
postgres=# SELECT * FROM dblink('dblink_name', 'SELECT txid_current()') AS t(txid bigint);
txid  
-------
83175
(1 row)

--关闭连接
postgres=# SELECT dblink_disconnect('dblink_name');
dblink_disconnect
-------------------
OK
(1 row)
--其他接口
1、dblink_connect 打开一个到远程数据库的持久连接
2、dblink_connect_u 不安全地打开一个到远程数据库的持久连接
3、dblink_disconnect 关闭一个到远程数据库的持久连接
4、dblink 在一个远程数据库中执行一个查询
5、dblink_exec 在一个远程数据库中执行一个命令
6、dblink_open 在一个远程数据库中打开一个游标
7、dblink_fetch 从一个远程数据库中的打开的游标返回行
8、dblink_close 关闭一个远程数据库中的游标
9、dblink_get_connections 返回所有打开的命名 dblink 连接的名称
10、dblink_error_message 得到在命名连接上的最后一个错误消息
11、dblink_send_query 发送一个异步查询到远程数据库
12、dblink_is_busy 检查连接是否正在忙于一个异步查询
13、dblink_get_notify 在一个连接上检索异步通知
14、dblink_get_result 得到一个异步查询结果
15、dblink_cancel_query 在命名连接上取消任何活动查询
16、dblink_get_pkey 返回一个关系的主键域的位置和域名称
17、dblink_build_sql_insert 使用一个本地元组构建一个 INSERT 语句,将主键域值替换为提供的值
18、dblink_build_sql_delete 使用所提供的主键域值构建一个 DELETE 语句
19、dblink_build_sql_update 使用一个本地元组构建一个 UPDATE 语句,将主键域值替换为提供的值

3.集中式dblink连接到teledb-x

--创建插件
postgres=# create extension dblink ;
CREATE EXTENSION
postgres=# \dx
                                List of installed extensions
Name   | Version |   Schema   |                         Description                          
---------+---------+------------+--------------------------------------------------------------
dblink | 1.2     | public     | connect to other PostgreSQL databases from within a database
plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)

--创建连接: 使用dblink连接到另一个数据库,需要指定连接参数,例如主机名、端口号、用户名和密码等
postgres=# SELECT dblink_connect('dblink_name', 'dbname=postgres host=127.0.0.1 port=12121 user=tangyujie password=密码');
dblink_connect
----------------
OK
(1 row)
--查询数据
postgres=#  SELECT * FROM dblink('dblink_name', 'SELECT * FROM t1') AS t(id int, name text);
id | name
----+------
 1 | 中国
 2 | 美国
(2 rows)
--执行函数
postgres=# SELECT dblink('dblink_name', 'SELECT txid_current();');
ERROR: function returning record called in context that cannot accept type record
postgres=# SELECT dblink('dblink_name', 'SELECT pgxc_node_str()');
ERROR: function returning record called in context that cannot accept type record
--关闭连接
postgres=# SELECT dblink_disconnect('dblink_name');
dblink_disconnect
-------------------
OK
(1 row)

结论

1.上述集中式telepg和分布式teledb-x采用dblink插件进行互联是可以的。

2.执行函数会报错:function returning record called in context that cannot accept type record。

0条评论
0 / 1000
唐****杰
3文章数
1粉丝数
唐****杰
3 文章 | 1 粉丝
唐****杰
3文章数
1粉丝数
唐****杰
3 文章 | 1 粉丝
原创

teledb-x与telepg的dblink插件互连测试

2024-10-17 09:34:35
7
0

teledb-x与telepg的dblink插件互连测试

1.准备2套集群

集群1:teledb-x的分布式集群,连接地址:127.0.0.1/12121,用户名密码:tangyujie/密码

集群2:telepg的集中式集群,连接地址:127.0.0.1/1234,用户名密码:tangyujie/密码

--分布式集群teledb-x
$ ./psql -p 12121 -d postgres -W
Password:
psql (PostgreSQL 10.0 TeleDBX V6)
Type "help" for help.

postgres=# \dx
                  List of installed extensions
    Name     | Version |   Schema   |         Description          
--------------+---------+------------+------------------------------
plpgsql     | 1.0     | pg_catalog | PL/pgSQL procedural language
teledbx_core | 1.0     | public     | core module of teledbx
(2 rows)
postgres=# create table t1(id int primary key,name varchar(11));
CREATE TABLE
postgres=# insert into t1 values(1,'中国'),(2,'美国');
COPY 2
postgres=# \dt
        List of relations
Schema | Name | Type |   Owner  
--------+------+-------+-----------
public | t1   | table | tangyujie
(1 row)

--集中式集群telepg
$ ./psql -p 1234 -d postgres -W
Password:
psql (10.23)
Type "help" for help.

postgres=# create table test(id int primary key,name varchar(11));
CREATE TABLE
postgres=# insert into test values(1,'hello'),(2,'world');
INSERT 0 2
postgres=# \dt
        List of relations
Schema | Name | Type |   Owner  
--------+------+-------+-----------
public | test | table | tangyujie
(1 row)

2.分布式dblink连接到telepg

--创建插件
postgres=# create extension dblink ;
CREATE EXTENSION
postgres=# \dx
                                  List of installed extensions
    Name     | Version |   Schema   |                         Description                          
--------------+---------+------------+--------------------------------------------------------------
dblink       | 1.2     | public     | connect to other PostgreSQL databases from within a database
plpgsql     | 1.0     | pg_catalog | PL/pgSQL procedural language
teledbx_core | 1.0     | public     | core module of teledbx
(3 rows)

--创建连接: 使用dblink连接到另一个数据库,需要指定连接参数,例如主机名、端口号、用户名和密码等
postgres=# SELECT dblink_connect('dblink_name', 'dbname=postgres host=127.0.0.1 port=1234 user=tangyujie password=密码');
dblink_connect
----------------
OK
(1 row)
--查询数据
postgres=# SELECT * FROM dblink('dblink_name', 'SELECT * FROM test') AS t(id int, name text);
id | name  
----+-------
 1 | hello
 2 | world
(2 rows)

--远程表与本地表关联查询
SELECT t1.id, t1.name AS local_name, t.name AS remote_name
FROM t1
JOIN (
   SELECT * FROM dblink('dblink_name', 'SELECT id, name FROM test')
   AS t(id INT, name TEXT)
) AS t
ON t1.id = t.id;
id | local_name | remote_name
----+------------+-------------
 1 | 中国       | hello
 2 | 美国       | world
(2 rows)

--执行函数
postgres=# SELECT dblink('dblink_name', 'SELECT txid_current();');
ERROR: function returning record called in context that cannot accept type record
postgres=# SELECT * FROM dblink('dblink_name', 'SELECT txid_current()') AS t(txid bigint);
txid  
-------
83175
(1 row)

--关闭连接
postgres=# SELECT dblink_disconnect('dblink_name');
dblink_disconnect
-------------------
OK
(1 row)
--其他接口
1、dblink_connect 打开一个到远程数据库的持久连接
2、dblink_connect_u 不安全地打开一个到远程数据库的持久连接
3、dblink_disconnect 关闭一个到远程数据库的持久连接
4、dblink 在一个远程数据库中执行一个查询
5、dblink_exec 在一个远程数据库中执行一个命令
6、dblink_open 在一个远程数据库中打开一个游标
7、dblink_fetch 从一个远程数据库中的打开的游标返回行
8、dblink_close 关闭一个远程数据库中的游标
9、dblink_get_connections 返回所有打开的命名 dblink 连接的名称
10、dblink_error_message 得到在命名连接上的最后一个错误消息
11、dblink_send_query 发送一个异步查询到远程数据库
12、dblink_is_busy 检查连接是否正在忙于一个异步查询
13、dblink_get_notify 在一个连接上检索异步通知
14、dblink_get_result 得到一个异步查询结果
15、dblink_cancel_query 在命名连接上取消任何活动查询
16、dblink_get_pkey 返回一个关系的主键域的位置和域名称
17、dblink_build_sql_insert 使用一个本地元组构建一个 INSERT 语句,将主键域值替换为提供的值
18、dblink_build_sql_delete 使用所提供的主键域值构建一个 DELETE 语句
19、dblink_build_sql_update 使用一个本地元组构建一个 UPDATE 语句,将主键域值替换为提供的值

3.集中式dblink连接到teledb-x

--创建插件
postgres=# create extension dblink ;
CREATE EXTENSION
postgres=# \dx
                                List of installed extensions
Name   | Version |   Schema   |                         Description                          
---------+---------+------------+--------------------------------------------------------------
dblink | 1.2     | public     | connect to other PostgreSQL databases from within a database
plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)

--创建连接: 使用dblink连接到另一个数据库,需要指定连接参数,例如主机名、端口号、用户名和密码等
postgres=# SELECT dblink_connect('dblink_name', 'dbname=postgres host=127.0.0.1 port=12121 user=tangyujie password=密码');
dblink_connect
----------------
OK
(1 row)
--查询数据
postgres=#  SELECT * FROM dblink('dblink_name', 'SELECT * FROM t1') AS t(id int, name text);
id | name
----+------
 1 | 中国
 2 | 美国
(2 rows)
--执行函数
postgres=# SELECT dblink('dblink_name', 'SELECT txid_current();');
ERROR: function returning record called in context that cannot accept type record
postgres=# SELECT dblink('dblink_name', 'SELECT pgxc_node_str()');
ERROR: function returning record called in context that cannot accept type record
--关闭连接
postgres=# SELECT dblink_disconnect('dblink_name');
dblink_disconnect
-------------------
OK
(1 row)

结论

1.上述集中式telepg和分布式teledb-x采用dblink插件进行互联是可以的。

2.执行函数会报错:function returning record called in context that cannot accept type record。

文章来自个人专栏
teledbx与telepg
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0