PL/Proxy
来自 PostgreSQL Wiki
跳转到导航跳转到搜索项目概述
PL/Proxy 是一个作为 PL 语言实现的数据库分区系统。 主要思想是创建一个代理函数,其签名与要调用的远程函数相同,因此只需要在代理函数体中指定目标信息。
项目状态
稳定,已投入生产。
功能
- PL/Proxy 函数从其自身的签名中检测到要调用的远程函数。
- 函数可以在集群的一个、几个或所有成员上运行。
- 如果查询在多个分区上执行,它将并行执行。
- 查询在远程服务器上以自动提交模式运行。
- 查询参数与查询主体分开发送,从而避免了双方在引用/取消引用方面的开销。
- 不包含代码连接池,如果需要,可以使用外部池,最好是 PgBouncer。
文档
下载
二进制包(可能不是最新的)
- Deb:PL/Proxy 包含在 Debian 和 Ubuntu 的官方仓库中,名为 postgresql-X.Y-plproxy 包,其中 X.Y 是 PostgreSQL 的主版本。
- RPM:PGDG Yum 仓库
社区支持
快速示例
简单的远程函数调用
连接到 localhost 上的 "users" 数据库,并调用那里的 SQL 函数:SELECT * FROM get_user_email($1);
CREATE FUNCTION get_user_email(username text) RETURNS text AS $$ CONNECT 'dbname=users'; $$ LANGUAGE plproxy;
分区远程函数调用
用户分散在多个数据库中,分区号通过取 hashtext(username) 获得。 这也需要配置集群,如文档中所述。 完成后,实际的代理函数如下
CREATE FUNCTION get_user_email(username text) RETURNS text AS $$ CLUSTER 'userdb'; RUN ON hashtext(username); $$ LANGUAGE plproxy;