pgmemcache

memcached interface

Overview

PackageVersionCategoryLicenseLanguage
pgmemcache2.3.0SIMMITC
IDExtensionBinLibLoadCreateTrustRelocSchema
9410pgmemcacheNoYesNoYesNoYes-
Relatedredis_fdw redis spat mongo_fdw kafka_fdw documentdb documentdb_core documentdb_distributed

missing pg12-14 on el.aarch64

Version

TypeRepoVersionPG VerPackageDeps
EXTPGDG2.3.01817161514pgmemcache-
RPMPGDG2.3.01817161514pgmemcache_$v-
DEBPGDG2.3.01817161514postgresql-$v-pgmemcache-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
PGDG 2.3.0
PGDG 2.3.0
el8.aarch64PGDG MISSPGDG MISS
el9.x86_64
PGDG 2.3.0
PGDG MISS
el9.aarch64PGDG MISSPGDG MISS
el10.x86_64
el10.aarch64
d12.x86_64
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
d12.aarch64
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
d13.x86_64
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
d13.aarch64
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
u22.x86_64
u22.aarch64
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
u24.x86_64
u24.aarch64
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0
PGDG 2.3.0

Install

You can install pgmemcache directly. First, make sure the PGDG repository is added and enabled:

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

Install the extension using pig or apt/yum/dnf:

pig install pgmemcache;          # Install for current active PG version
pig ext install -y pgmemcache -v 18  # PG 18
pig ext install -y pgmemcache -v 17  # PG 17
pig ext install -y pgmemcache -v 16  # PG 16
pig ext install -y pgmemcache -v 15  # PG 15
pig ext install -y pgmemcache -v 14  # PG 14
dnf install -y pgmemcache_18       # PG 18
dnf install -y pgmemcache_17       # PG 17
dnf install -y pgmemcache_16       # PG 16
dnf install -y pgmemcache_15       # PG 15
dnf install -y pgmemcache_14       # PG 14
apt install -y postgresql-18-pgmemcache   # PG 18
apt install -y postgresql-17-pgmemcache   # PG 17
apt install -y postgresql-16-pgmemcache   # PG 16
apt install -y postgresql-15-pgmemcache   # PG 15
apt install -y postgresql-14-pgmemcache   # PG 14

Create Extension:

CREATE EXTENSION pgmemcache;

Usage

pgmemcache: memcached interface

Provides PostgreSQL user-defined functions for interacting with memcached servers.

Enabling

CREATE EXTENSION pgmemcache;

Configure default servers in postgresql.conf:

shared_preload_libraries = 'pgmemcache'
pgmemcache.default_servers = 'localhost:11211'
pgmemcache.default_behavior = 'DEAD_TIMEOUT:2'

Server Management

SELECT memcache_server_add('localhost:11211');
SELECT memcache_server_add('cache-host');  -- uses default port 11211

Setting and Getting Values

-- Set a key (overwrites if exists)
SELECT memcache_set('user:1:name', 'John Doe');
SELECT memcache_set('session:abc', 'data', now() + interval '1 hour');

-- Add a key (fails if exists)
SELECT memcache_add('user:2:name', 'Jane Doe');
SELECT memcache_add('temp_key', 'value', interval '5 minutes');

-- Replace (fails if key doesn't exist)
SELECT memcache_replace('user:1:name', 'John Smith');

-- Get a value
SELECT memcache_get('user:1:name');  -- returns text or NULL

-- Get multiple values
SELECT key, value FROM memcache_get_multi('{key1,key2,key3}'::text[]);

Atomic Counters

SELECT memcache_incr('counter');        -- increment by 1
SELECT memcache_incr('counter', 5);     -- increment by 5
SELECT memcache_decr('counter');        -- decrement by 1
SELECT memcache_decr('counter', 3);     -- decrement by 3

Deleting and Flushing

SELECT memcache_delete('user:1:name');
SELECT memcache_flush_all();  -- flush all servers

Statistics

SELECT memcache_stats();  -- returns stats from all servers

Trigger Example

Invalidate cache on table updates:

CREATE OR REPLACE FUNCTION auth_passwd_upd()
RETURNS TRIGGER LANGUAGE plpgsql AS $$
BEGIN
    IF OLD.passwd <> NEW.passwd THEN
        PERFORM memcache_delete('user_id_' || NEW.user_id || '_password');
    END IF;
    RETURN NEW;
END;
$$;

CREATE TRIGGER auth_passwd_upd_trg AFTER UPDATE ON passwd
    FOR EACH ROW EXECUTE PROCEDURE auth_passwd_upd();

Last Modified 2026-03-12: add pg extension catalog (95749bf)