Zum Hauptinhalt springen
connic
Verbindungen

PostgreSQL

PostgreSQL-NOTIFY-Nachrichten aus Anwendungscode oder Datenbank-Triggern lösen Agenten aus.

Zuletzt aktualisiert
Inbound (Datenbank-Ereignisse)
Lauscht auf PostgreSQL-NOTIFY-Ereignisse in einem konfigurierten Channel. Trifft eine Benachrichtigung ein, wird der Agent mit den Payload-Daten gestartet.

Einrichtung

  1. Erreichbarkeit sicherstellen

    Die PostgreSQL-Datenbank muss über das Internet erreichbar sein. Verwende für private Netzwerke alternativ die connic Bridge.

  2. NOTIFY-Nachrichten senden

    Sende Benachrichtigungen aus dem Anwendungscode oder füge den zu überwachenden Tabellen eine Trigger-Funktion hinzu.

  3. Verbindung erstellen

    Öffne den Agenten, klicke im Verbindungsflussdiagramm auf Add inbound connector, dann auf Create New Connector und wähle PostgreSQL.

  4. Konfigurieren und erstellen

    Gib Host, Port, Database, Username, Password, Channel und SSL-Einstellungen ein. Klicke auf Create. Die Verbindung wird pausiert angelegt; klicke in der Verbindungsansicht auf Resume, damit connic im Channel auf Benachrichtigungen lauscht.

Funktionsweise

Die Verbindung hält eine dauerhafte Verbindung zur PostgreSQL-Datenbank und abonniert einen NOTIFY-Channel. Sendet die Datenbank eine Benachrichtigung – über Trigger oder Anwendungscode –, empfängt die Verbindung sie und startet Agent Runs mit der Benachrichtigungs-Payload.

PostgreSQL
NOTIFY
Agent gestartet
Konfiguration
  • Host: Hostname oder IP-Adresse des PostgreSQL-Servers
  • Port: Server-Port (Standard: 5432)
  • Database: Name der Datenbank, zu der die Verbindung hergestellt wird
  • Username: Datenbanknutzer für die Authentifizierung
  • Password: Datenbankpasswort
  • Channel: Name des abzuhörenden NOTIFY-Channels (z. B. new_customers)
  • SSL Mode: Verbindungssicherheit (disable, prefer, require)
  • Parse JSON Payload: Benachrichtigungs-Payload automatisch als JSON parsen

Erforderliche Berechtigungen

Der Datenbanknutzer benötigt die Berechtigung CONNECT für die Datenbank. Zum Empfangen von NOTIFY-Ereignissen sind keine besonderen Berechtigungen erforderlich.

Event-Payload

Der Agent erhält die Benachrichtigungs-Payload mit PostgreSQL-Metadaten:

event-payload.json
{
  "customer_id": "12345",
  "email": "customer@example.com",
  "company_name": "Acme Corp",
  "created_at": "2024-01-15T10:30:00.000Z",
  "_postgres": {
    "channel": "new_customers",
    "pid": 12345,
    "timestamp": "2024-01-15T10:30:00.123456"
  }
}

Die _postgres-Metadaten enthalten den Channel-Namen, die ID des Backend-Prozesses und den Zeitstempel.

Datenbank einrichten

Option 1: Trigger-basierte Benachrichtigungen

Erstelle eine Trigger-Funktion, die beim Einfügen von Zeilen Benachrichtigungen sendet:

query.sql
-- Create a trigger function that sends notifications
CREATE OR REPLACE FUNCTION notify_new_customer()
RETURNS TRIGGER AS $$
BEGIN
  -- Send JSON payload with row data
  PERFORM pg_notify(
    'new_customers',
    json_build_object(
      'customer_id', NEW.id,
      'email', NEW.email,
      'company_name', NEW.company_name,
      'created_at', NEW.created_at
    )::text
  );
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Attach trigger to table
CREATE TRIGGER customer_insert_trigger
  AFTER INSERT ON customers
  FOR EACH ROW
  EXECUTE FUNCTION notify_new_customer();

Option 2: Manuelle Benachrichtigungen

Sende Benachrichtigungen aus dem Anwendungscode:

query.sql
-- Send a notification manually from your application
SELECT pg_notify('new_customers', '{"customer_id": "12345", "action": "created"}');

-- Or using NOTIFY directly
NOTIFY new_customers, '{"customer_id": "12345", "action": "created"}';

Inserts und Updates verarbeiten

Erweitere den Trigger, um mehrere Operationen zu verarbeiten:

query.sql
-- Trigger for both INSERT and UPDATE
CREATE OR REPLACE FUNCTION notify_customer_changes()
RETURNS TRIGGER AS $$
BEGIN
  PERFORM pg_notify(
    'customer_changes',
    json_build_object(
      'operation', TG_OP,
      'customer_id', NEW.id,
      'old_email', CASE WHEN TG_OP = 'UPDATE' THEN OLD.email ELSE NULL END,
      'new_email', NEW.email,
      'updated_at', NOW()
    )::text
  );
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER customer_change_trigger
  AFTER INSERT OR UPDATE ON customers
  FOR EACH ROW
  EXECUTE FUNCTION notify_customer_changes();

Bewährte Vorgehensweisen

  • Payloads klein halten: NOTIFY-Payloads sind auf 8000 Byte begrenzt. Sende IDs und lass den Agenten die vollständigen Daten abrufen.
  • Spezifische Channels verwenden: Erstelle separate Channels für verschiedene Ereignistypen (z. B. orders_created, users_updated).
  • JSON-Payloads: Aktiviere „Parse JSON Payload“ für strukturierte Daten. Der Agent erhält die geparsten Objekte direkt.
  • Verbindungsnutzung: Jede aktive Verbindung hält eine dauerhafte Datenbankverbindung.
Hinweise zu Verbindungen
Jede PostgreSQL-Verbindung hält eine dauerhafte Verbindung. Falls die Datenbank Verbindungslimits hat, berücksichtige das beim Erstellen mehrerer Verbindungen.