plproxy

plproxy

plproxy : Database partitioning implemented as procedural language

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
2520
plproxy
plproxy
2.11.0
OLAP
BSD 0-Clause
C
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--s-d--
No
Yes
No
Yes
no
no
Relationships
See Also
citus
dblink
postgres_fdw
pg_partman
odbc_fdw
jdbc_fdw
citus_columnar
columnar

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PGDG
2.11.0
18
17
16
15
14
plproxy-
RPM
PGDG
2.11.0
18
17
16
15
14
plproxy_$v-
DEB
PGDG
2.11.0
18
17
16
15
14
postgresql-$v-plproxy-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PGDG 2.11.0
PGDG 2.11.0
PIGSTY 2.11.0
PIGSTY 2.11.0
PIGSTY 2.11.0
el8.aarch64
PGDG 2.11.0
PGDG 2.11.0
PIGSTY 2.11.0
PIGSTY 2.11.0
PIGSTY 2.11.0
el9.x86_64
PGDG 2.11.0
PGDG 2.11.0
PIGSTY 2.11.0
PIGSTY 2.11.0
PIGSTY 2.11.0
el9.aarch64
PGDG 2.11.0
PGDG 2.11.0
PIGSTY 2.11.0
PIGSTY 2.11.0
PIGSTY 2.11.0
el10.x86_64
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
el10.aarch64
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
d12.x86_64
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
d12.aarch64
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
d13.x86_64
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
d13.aarch64
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
u22.x86_64
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
u22.aarch64
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
u24.x86_64
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
u24.aarch64
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PGDG 2.11.0
PackageVersionOSORGSIZEFile URL
plproxy_182.11.0el8.x86_64pgdg48.2 KiBplproxy_18-2.11.0-4PGDG.rhel8.x86_64.rpm
plproxy_182.11.0el8.x86_64pigsty44.4 KiBplproxy_18-2.11.0-1PIGSTY.el8.x86_64.rpm
plproxy_182.11.0el8.aarch64pgdg45.8 KiBplproxy_18-2.11.0-4PGDG.rhel8.aarch64.rpm
plproxy_182.11.0el8.aarch64pigsty42.0 KiBplproxy_18-2.11.0-1PIGSTY.el8.aarch64.rpm
plproxy_182.11.0el9.x86_64pgdg45.8 KiBplproxy_18-2.11.0-4PGDG.rhel9.x86_64.rpm
plproxy_182.11.0el9.x86_64pigsty43.8 KiBplproxy_18-2.11.0-1PIGSTY.el9.x86_64.rpm
plproxy_182.11.0el9.aarch64pgdg43.4 KiBplproxy_18-2.11.0-4PGDG.rhel9.aarch64.rpm
plproxy_182.11.0el9.aarch64pigsty41.4 KiBplproxy_18-2.11.0-1PIGSTY.el9.aarch64.rpm
plproxy_182.11.0el10.x86_64pgdg46.7 KiBplproxy_18-2.11.0-4PGDG.rhel10.x86_64.rpm
plproxy_182.11.0el10.aarch64pgdg44.9 KiBplproxy_18-2.11.0-4PGDG.rhel10.aarch64.rpm
postgresql-18-plproxy2.11.0d12.x86_64pgdg133.8 KiBpostgresql-18-plproxy_2.11.0-13.pgdg12+1_amd64.deb
postgresql-18-plproxy2.11.0d12.aarch64pgdg130.0 KiBpostgresql-18-plproxy_2.11.0-13.pgdg12+1_arm64.deb
postgresql-18-plproxy2.11.0d13.x86_64pgdg133.9 KiBpostgresql-18-plproxy_2.11.0-13.pgdg13+1_amd64.deb
postgresql-18-plproxy2.11.0d13.aarch64pgdg130.1 KiBpostgresql-18-plproxy_2.11.0-13.pgdg13+1_arm64.deb
postgresql-18-plproxy2.11.0u22.x86_64pgdg138.4 KiBpostgresql-18-plproxy_2.11.0-13.pgdg22.04+1_amd64.deb
postgresql-18-plproxy2.11.0u22.aarch64pgdg133.9 KiBpostgresql-18-plproxy_2.11.0-13.pgdg22.04+1_arm64.deb
postgresql-18-plproxy2.11.0u24.x86_64pgdg132.0 KiBpostgresql-18-plproxy_2.11.0-13.pgdg24.04+1_amd64.deb
postgresql-18-plproxy2.11.0u24.aarch64pgdg128.6 KiBpostgresql-18-plproxy_2.11.0-13.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
plproxy_172.11.0el8.x86_64pgdg48.1 KiBplproxy_17-2.11.0-2PGDG.rhel8.x86_64.rpm
plproxy_172.11.0el8.x86_64pigsty44.4 KiBplproxy_17-2.11.0-1PIGSTY.el8.x86_64.rpm
plproxy_172.11.0el8.aarch64pgdg45.6 KiBplproxy_17-2.11.0-2PGDG.rhel8.aarch64.rpm
plproxy_172.11.0el8.aarch64pigsty42.0 KiBplproxy_17-2.11.0-1PIGSTY.el8.aarch64.rpm
plproxy_172.11.0el9.x86_64pgdg45.7 KiBplproxy_17-2.11.0-2PGDG.rhel9.x86_64.rpm
plproxy_172.11.0el9.x86_64pigsty43.9 KiBplproxy_17-2.11.0-1PIGSTY.el9.x86_64.rpm
plproxy_172.11.0el9.aarch64pgdg43.5 KiBplproxy_17-2.11.0-2PGDG.rhel9.aarch64.rpm
plproxy_172.11.0el9.aarch64pigsty41.6 KiBplproxy_17-2.11.0-1PIGSTY.el9.aarch64.rpm
plproxy_172.11.0el10.x86_64pgdg46.7 KiBplproxy_17-2.11.0-4PGDG.rhel10.x86_64.rpm
plproxy_172.11.0el10.aarch64pgdg44.9 KiBplproxy_17-2.11.0-4PGDG.rhel10.aarch64.rpm
postgresql-17-plproxy2.11.0d12.x86_64pgdg133.7 KiBpostgresql-17-plproxy_2.11.0-13.pgdg12+1_amd64.deb
postgresql-17-plproxy2.11.0d12.aarch64pgdg130.0 KiBpostgresql-17-plproxy_2.11.0-13.pgdg12+1_arm64.deb
postgresql-17-plproxy2.11.0d13.x86_64pgdg133.7 KiBpostgresql-17-plproxy_2.11.0-13.pgdg13+1_amd64.deb
postgresql-17-plproxy2.11.0d13.aarch64pgdg130.1 KiBpostgresql-17-plproxy_2.11.0-13.pgdg13+1_arm64.deb
postgresql-17-plproxy2.11.0u22.x86_64pgdg151.8 KiBpostgresql-17-plproxy_2.11.0-13.pgdg22.04+1_amd64.deb
postgresql-17-plproxy2.11.0u22.aarch64pgdg147.9 KiBpostgresql-17-plproxy_2.11.0-13.pgdg22.04+1_arm64.deb
postgresql-17-plproxy2.11.0u24.x86_64pgdg131.9 KiBpostgresql-17-plproxy_2.11.0-13.pgdg24.04+1_amd64.deb
postgresql-17-plproxy2.11.0u24.aarch64pgdg128.4 KiBpostgresql-17-plproxy_2.11.0-13.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
plproxy_152.11.0el8.x86_64pigsty45.7 KiBplproxy_15-2.11.0-1PIGSTY.el8.x86_64.rpm
plproxy_152.11.0el8.x86_64pgdg49.2 KiBplproxy_15-2.11.0-1PGDG.rhel8.x86_64.rpm
plproxy_152.10.0el8.x86_64pgdg145.3 KiBplproxy_15-2.10.0-3.rhel8.x86_64.rpm
plproxy_152.11.0el8.aarch64pigsty43.0 KiBplproxy_15-2.11.0-1PIGSTY.el8.aarch64.rpm
plproxy_152.11.0el8.aarch64pgdg46.6 KiBplproxy_15-2.11.0-1PGDG.rhel8.aarch64.rpm
plproxy_152.10.0el8.aarch64pgdg142.2 KiBplproxy_15-2.10.0-3.rhel8.aarch64.rpm
plproxy_152.11.0el9.x86_64pigsty47.3 KiBplproxy_15-2.11.0-1PIGSTY.el9.x86_64.rpm
plproxy_152.11.0el9.x86_64pgdg49.0 KiBplproxy_15-2.11.0-1PGDG.rhel9.x86_64.rpm
plproxy_152.10.0el9.x86_64pgdg146.6 KiBplproxy_15-2.10.0-3.rhel9.x86_64.rpm
plproxy_152.11.0el9.aarch64pigsty45.4 KiBplproxy_15-2.11.0-1PIGSTY.el9.aarch64.rpm
plproxy_152.11.0el9.aarch64pgdg46.8 KiBplproxy_15-2.11.0-1PGDG.rhel9.aarch64.rpm
plproxy_152.10.0el9.aarch64pgdg144.3 KiBplproxy_15-2.10.0-3.rhel9.aarch64.rpm
plproxy_152.11.0el10.x86_64pgdg49.9 KiBplproxy_15-2.11.0-4PGDG.rhel10.x86_64.rpm
plproxy_152.11.0el10.aarch64pgdg48.1 KiBplproxy_15-2.11.0-4PGDG.rhel10.aarch64.rpm
postgresql-15-plproxy2.11.0d12.x86_64pgdg134.9 KiBpostgresql-15-plproxy_2.11.0-13.pgdg12+1_amd64.deb
postgresql-15-plproxy2.11.0d12.aarch64pgdg131.3 KiBpostgresql-15-plproxy_2.11.0-13.pgdg12+1_arm64.deb
postgresql-15-plproxy2.11.0d13.x86_64pgdg135.1 KiBpostgresql-15-plproxy_2.11.0-13.pgdg13+1_amd64.deb
postgresql-15-plproxy2.11.0d13.aarch64pgdg131.3 KiBpostgresql-15-plproxy_2.11.0-13.pgdg13+1_arm64.deb
postgresql-15-plproxy2.11.0u22.x86_64pgdg154.1 KiBpostgresql-15-plproxy_2.11.0-13.pgdg22.04+1_amd64.deb
postgresql-15-plproxy2.11.0u22.aarch64pgdg150.4 KiBpostgresql-15-plproxy_2.11.0-13.pgdg22.04+1_arm64.deb
postgresql-15-plproxy2.11.0u24.x86_64pgdg134.5 KiBpostgresql-15-plproxy_2.11.0-13.pgdg24.04+1_amd64.deb
postgresql-15-plproxy2.11.0u24.aarch64pgdg131.1 KiBpostgresql-15-plproxy_2.11.0-13.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
plproxy_142.11.0el8.x86_64pigsty45.7 KiBplproxy_14-2.11.0-1PIGSTY.el8.x86_64.rpm
plproxy_142.11.0el8.x86_64pgdg49.2 KiBplproxy_14-2.11.0-1PGDG.rhel8.x86_64.rpm
plproxy_142.10.0el8.x86_64pgdg143.8 KiBplproxy_14-2.10.0-3.rhel8.x86_64.rpm
plproxy_142.11.0el8.aarch64pigsty43.0 KiBplproxy_14-2.11.0-1PIGSTY.el8.aarch64.rpm
plproxy_142.11.0el8.aarch64pgdg46.6 KiBplproxy_14-2.11.0-1PGDG.rhel8.aarch64.rpm
plproxy_142.10.0el8.aarch64pgdg140.5 KiBplproxy_14-2.10.0-3.rhel8.aarch64.rpm
plproxy_142.11.0el9.x86_64pigsty47.1 KiBplproxy_14-2.11.0-1PIGSTY.el9.x86_64.rpm
plproxy_142.11.0el9.x86_64pgdg48.7 KiBplproxy_14-2.11.0-1PGDG.rhel9.x86_64.rpm
plproxy_142.11.0el9.aarch64pigsty45.3 KiBplproxy_14-2.11.0-1PIGSTY.el9.aarch64.rpm
plproxy_142.11.0el9.aarch64pgdg46.8 KiBplproxy_14-2.11.0-1PGDG.rhel9.aarch64.rpm
plproxy_142.10.0el9.aarch64pgdg142.6 KiBplproxy_14-2.10.0-3.rhel9.aarch64.rpm
plproxy_142.11.0el10.x86_64pgdg49.8 KiBplproxy_14-2.11.0-4PGDG.rhel10.x86_64.rpm
plproxy_142.11.0el10.aarch64pgdg48.0 KiBplproxy_14-2.11.0-4PGDG.rhel10.aarch64.rpm
postgresql-14-plproxy2.11.0d12.x86_64pgdg134.6 KiBpostgresql-14-plproxy_2.11.0-13.pgdg12+1_amd64.deb
postgresql-14-plproxy2.11.0d12.aarch64pgdg130.9 KiBpostgresql-14-plproxy_2.11.0-13.pgdg12+1_arm64.deb
postgresql-14-plproxy2.11.0d13.x86_64pgdg134.8 KiBpostgresql-14-plproxy_2.11.0-13.pgdg13+1_amd64.deb
postgresql-14-plproxy2.11.0d13.aarch64pgdg131.3 KiBpostgresql-14-plproxy_2.11.0-13.pgdg13+1_arm64.deb
postgresql-14-plproxy2.11.0u22.x86_64pgdg152.5 KiBpostgresql-14-plproxy_2.11.0-13.pgdg22.04+1_amd64.deb
postgresql-14-plproxy2.11.0u22.aarch64pgdg148.8 KiBpostgresql-14-plproxy_2.11.0-13.pgdg22.04+1_arm64.deb
postgresql-14-plproxy2.11.0u24.x86_64pgdg134.4 KiBpostgresql-14-plproxy_2.11.0-13.pgdg24.04+1_amd64.deb
postgresql-14-plproxy2.11.0u24.aarch64pgdg131.1 KiBpostgresql-14-plproxy_2.11.0-13.pgdg24.04+1_arm64.deb

Source

Install

Make sure PGDG repo available:

pig repo add pgdg -u    # add pgdg repo and update cache

Install this extension with pig:

pig install plproxy;		# install via package name, for the active PG version

pig install plproxy -v 18;   # install for PG 18
pig install plproxy -v 17;   # install for PG 17
pig install plproxy -v 16;   # install for PG 16
pig install plproxy -v 15;   # install for PG 15
pig install plproxy -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION plproxy;

Usage

plproxy: Database partitioning implemented as procedural language

PL/Proxy is a PostgreSQL procedural language handler that enables remote procedure calls between PostgreSQL databases, with optional sharding.

Create the Extension

CREATE EXTENSION plproxy;

Language Statements

PL/Proxy functions use four types of statements:

Cluster selection – connect to a pre-configured cluster:

CREATE FUNCTION get_user(i_id int) RETURNS SETOF users AS $$
    CLUSTER 'mycluster';
    RUN ON i_id;
$$ LANGUAGE plproxy;

Direct connection – use a connection string:

CREATE FUNCTION get_config(key text) RETURNS text AS $$
    CONNECT 'host=remotehost dbname=config';
    SELECT val FROM config WHERE key = $1;
$$ LANGUAGE plproxy;

Execution Modes

RUN ON hash – route to a specific partition based on a hash:

CREATE FUNCTION get_user_settings(i_username text) RETURNS SETOF user_settings AS $$
    RUN ON namehash(i_username);
$$ LANGUAGE plproxy;

RUN ON ALL – execute on all databases in parallel:

CREATE FUNCTION get_all_counts() RETURNS SETOF record AS $$
    RUN ON ALL;
    SELECT count(*) FROM users;
$$ LANGUAGE plproxy;

RUN ON ANY – randomly select a server:

CREATE FUNCTION get_random_quote() RETURNS text AS $$
    RUN ON ANY;
    SELECT quote FROM quotes ORDER BY random() LIMIT 1;
$$ LANGUAGE plproxy;

Cluster Configuration

Clusters are configured using SQL/MED (Management of External Data):

CREATE SERVER mycluster FOREIGN DATA WRAPPER plproxy
    OPTIONS (
        connection_lifetime '1800',
        p0 'host=node0 dbname=mydb',
        p1 'host=node1 dbname=mydb',
        p2 'host=node2 dbname=mydb',
        p3 'host=node3 dbname=mydb'
    );

CREATE USER MAPPING FOR CURRENT_USER
    SERVER mycluster
    OPTIONS (user 'proxy_user', password 'secret');
Last updated on