pg-logical-replication
Version:
PostgreSQL Location Replication client - logical WAL replication streaming
73 lines (72 loc) • 2.77 kB
TypeScript
import EventEmitter2 from 'eventemitter2';
import { ClientConfig } from 'pg';
import { AbstractPlugin } from './output-plugins/abstract.plugin.js';
export interface ReplicationClientConfig extends ClientConfig {
replication: 'database';
}
export interface LogicalReplicationConfig {
acknowledge?: {
/**
* If the value is false, acknowledge must be done manually.
* Default: true
*/
auto: boolean;
/**
* Acknowledge is performed every set time (sec). If 0, do not do it.
* Default: 10
*/
timeoutSeconds: 0 | 10 | number;
};
/**
* Flow control (backpressure) configuration.
* When enabled, the stream will be paused until the data handler completes,
* preventing memory overflow when processing is slower than the incoming message rate.
*/
flowControl?: {
/**
* If true, pause the stream until the data handler completes.
* This enables backpressure support for async handlers.
* Default: false
*/
enabled: boolean;
};
}
export interface LogicalReplicationService {
on(event: 'error', listener: (err: Error) => void): this;
on(event: 'data', listener: (lsn: string, log: any) => Promise<void> | void): this;
on(event: 'start', listener: () => Promise<void> | void): this;
on(event: 'acknowledge', listener: (lsn: string) => Promise<void> | void): this;
on(event: 'heartbeat', listener: (lsn: string, timestamp: number, shouldRespond: boolean) => Promise<void> | void): this;
}
export declare class LogicalReplicationService extends EventEmitter2 implements LogicalReplicationService {
readonly clientConfig: ClientConfig;
readonly config: LogicalReplicationConfig;
constructor(clientConfig: ClientConfig, config?: Partial<LogicalReplicationConfig>);
private _lastLsn;
lastLsn(): string;
private _client;
private _connection;
private client;
private _stop;
isStop(): boolean;
private _messageQueue;
private _processing;
stop(): Promise<this>;
destroy(): Promise<this>;
subscribe(plugin: AbstractPlugin, slotName: string): Promise<this>;
subscribe(plugin: AbstractPlugin, slotName: string, uptoLsn: string): Promise<this>;
private _acknowledge;
/**
* Process messages in the queue sequentially with backpressure support.
* Pauses the stream while processing and resumes when the queue is empty.
*/
private _processQueue;
private lastStandbyStatusUpdatedTime;
private checkStandbyStatusTimer;
private checkStandbyStatus;
/**
* @param lsn
* @param ping Request server to respond
*/
acknowledge(lsn: string, ping?: boolean): Promise<boolean>;
}