PostgreSQL
PostgreSQL-NOTIFY-Nachrichten aus Anwendungscode oder Datenbank-Triggern lösen Agenten aus.
Auf dieser Seite
Einrichtung
Erreichbarkeit sicherstellen
Die PostgreSQL-Datenbank muss über das Internet erreichbar sein. Verwende für private Netzwerke alternativ die Connic Bridge.
NOTIFY-Nachrichten senden
Sende Benachrichtigungen aus dem Anwendungscode oder füge den zu überwachenden Tabellen eine Trigger-Funktion hinzu.
Verbindung erstellen
Öffne den Agenten, klicke im Verbindungsflussdiagramm auf Add inbound connector, dann auf Create New Connector und wähle PostgreSQL.
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.
- 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:
{
"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:
-- 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:
-- 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:
-- 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.