Zum Hauptinhalt springen
Connic
Verbindungen

PostgreSQL

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

Zuletzt aktualisiert
Inbound (Database Events)
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; Connic lauscht anschließend im Channel auf Benachrichtigungen.

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.