basebackup_to_shell

basebackup_to_shell

basebackup_to_shell : adds a custom basebackup target called shell

Overview

ID Extension Package Version Category License Language
5950
basebackup_to_shell
basebackup_to_shell
-
ADMIN
PostgreSQL
C
Attribute Has Binary Has Library Need Load Has DDL Relocatable Trusted
--s----
No
Yes
No
No
no
no
Relationships
See Also
basic_archive
pg_walinspect
pg_repack
pg_rewrite
pg_squeeze
pg_dirtyread
pgfincore
pg_cooldown

Packages

PG18 PG17 PG16 PG15 PG14
-
-
-
-
N/A

This is a built-in contrib extension ship with the PostgreSQL kernel

Install

This extension does not need CREATE EXTENSION DDL command

Usage

basebackup_to_shell: adds a custom basebackup target called shell

The basebackup_to_shell module adds a custom shell backup target to pg_basebackup, allowing administrators to pipe backup archives through arbitrary shell commands.

Configuration

Add to postgresql.conf:

shared_preload_libraries = 'basebackup_to_shell'

# Command to execute for each archive; receives archive data on stdin
basebackup_to_shell.command = 'gzip > /backup/%f.gz'

# Optional: restrict usage to a specific role
basebackup_to_shell.required_role = 'backup_admin'

Parameters

Parameter Type Description
basebackup_to_shell.command string Shell command to execute; receives archive on stdin
basebackup_to_shell.required_role string Role required to use the shell target (empty = any replication user)

Command Placeholders

Placeholder Replaced With
%f Archive filename (e.g., base.tar)
%d User-provided target detail string
%% Literal %

Examples

# Compress backups to a local directory
# postgresql.conf: basebackup_to_shell.command = 'gzip > /backup/%f.gz'
pg_basebackup --target=shell

# Upload to S3 with a detail parameter
# postgresql.conf: basebackup_to_shell.command = 'aws s3 cp - s3://bucket/%d/%f'
pg_basebackup --target=shell:myprefix

# Custom processing pipeline
# postgresql.conf: basebackup_to_shell.command = 'zstd | ssh backup-host "cat > /backup/%f.zst"'
pg_basebackup --target=shell

The %d placeholder requires a target detail to be provided via --target=shell:DETAIL. If %d is not in the command, providing a detail is prohibited. Detail strings may only contain alphanumeric characters.

Last updated on