PL/Proxy

来自 PostgreSQL Wiki
跳转到导航跳转到搜索

项目概述

PL/Proxy 是一个作为 PL 语言实现的数据库分区系统。 主要思想是创建一个代理函数,其签名与要调用的远程函数相同,因此只需要在代理函数体中指定目标信息。

项目状态

稳定,已投入生产。

功能

  • PL/Proxy 函数从其自身的签名中检测到要调用的远程函数。
  • 函数可以在集群的一个、几个或所有成员上运行。
  • 如果查询在多个分区上执行,它将并行执行。
  • 查询在远程服务器上以自动提交模式运行。
  • 查询参数与查询主体分开发送,从而避免了双方在引用/取消引用方面的开销。
  • 不包含代码连接池,如果需要,可以使用外部池,最好是 PgBouncer

文档

下载

二进制包(可能不是最新的)

  • Deb:PL/Proxy 包含在 DebianUbuntu 的官方仓库中,名为 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;