自定义函数与表的路由规则

更新时间:
复制 MD 格式

数据库代理提供函数或表的自定义路由功能,通过此功能可以让自定义函数的读操作路由到只读库(原默认路由到主库),或者让自定义表读的操作路由到主库(原默认路由到只读库)。

适用范围

  • 本章节所有操作需要使用高权限账号通过主地址连接到postgres库中进行。

  • 配置函数或表的路由白名单之后,仅对新建连接生效。

创建插件

请使用高权限账号,通过集群主地址连接postgres库执行以下命令,创建polar_proxy_utils插件。

CREATE EXTENSION polar_proxy_utils;

插入记录

执行以下命令,插入记录。

SELECT polar_add_proxy_routing_strategy(_name, _type, rw_mode);
说明
  • _name:需要添加的路由的表名或者函数名。

  • _type:标记此次添加的为表名或者函数名。t:表示表名;f:表示函数名。

  • rw_mode:涉及表名或者函数名的查询请求,要路由到主库还是只读库。w:表示只能路由到主库;r:表示可以路由到只读库。

例如,执行SELECT polar_add_proxy_routing_strategy('lol', 't', 'w');命令。

postgres=# SELECT polar_list_proxy_routing_strategy();
 polar_list_proxy_routing_strategy
----------------------------------
(0 rows)

postgres=# SELECT polar_add_proxy_routing_strategy('lol', 't', 'w');
 polar_add_proxy_routing_strategy
----------------------------------
(1 row)

postgres=# SELECT polar_list_proxy_routing_strategy();
        polar_list_proxy_routing_strategy
-------------------------------------------------
 (lol,table,write,"2020-03-24  04:12:56.245526")
(1 row)
  • 添加这条记录之前,执行SELECT * from lol有机会路由到只读库。

  • 添加这条记录之后,执行SELECT * from lol只会路由到主库。

展示白名单信息

执行以下命令,展示白名单信息。

SELECT polar_list_proxy_routing_strategy();
postgres=# SELECT polar_list_proxy_routing_strategy();
       polar_list_proxy_routing_strategy
-----------------------------------------------------
 (lol,table,write,"2020-03-24 04:12:56.245526")
 (abc,function,read,"2020-03-24 04:15:23.854227")
(2 rows)

删除一条白名单记录

执行以下命令,删除一条白名单记录。

SELECT polar_delete_proxy_routing_strategy(_name, _type);
说明
  • _name:需要删除的路由的表名或者函数名。

  • _type:标记此次删除的是表名还是函数名。t:表示表名;f:表示函数名。

例如,执行SELECT polar_delete_proxy_routing_strategy('lol', 't');命令。

postgres=# SELECT polar_list_proxy_routing_strategy();
        polar_list_proxy_routing_strategy
---------------------------------------------------
 (lol,table,write,"2020-03-24 04:12:56.245526")
 (abc,function,read,"2020-03-24 04:15:23.854227")
(2 rows)

postgres=# SELECT polar_delete_proxy_routing_strategy('lol', 't');
 polar_delete_proxy_routing_strategy
-------------------------------------
(1 row)

postgres=# SELECT polar_list_proxy_routing_strategy();
        polar_list_proxy_routing_strategy
---------------------------------------------------
 (abc,function,read,"2020-03-24 04:15:23.854227")
(1 row)
  • 删除这条记录之前,执行SELECT * from lol会路由到主库。

  • 删除这条记录之后,执行SELECT * from lol就会路由到只读库。

删除所有白名单记录

执行以下命令,删除所有白名单记录。

SELECT polar_truncate_proxy_routing_strategy();
postgres=# SELECT polar_list_proxy_routing_strategy();
        polar_list_proxy_routing_strategy
-----------------------------------------------------
 (abc,function,read,"2020-03-24 04:15:23.854227")
 (lol,table,write,"2020-03-24 04:20:17.186641")
(2 rows)

postgres=# SELECT polar_truncate_proxy_routing_strategy();
 polar_truncate_proxy_routing_strategy
---------------------------------------
(1 row)

postgres=# SELECT polar_list_proxy_routing_strategy();
 polar_list_proxy_routing_strategy
-----------------------------------
(0 rows)