Start · Sprachen · PHP · Referenz · pg_last_notice

pg_last_notice

Funktion

Liefert die letzte oder alle NOTICE-Meldungen, die der PostgreSQL-Server während einer Verbindung gesendet hat.

seit PHP 4.0.6 Kategorie: db

Signatur

pg_last_notice(PgSql\Connection $connection, int $option = PGSQL_NOTICE_LAST): array|string|bool

Beschreibung

pg_last_notice() gibt die zuletzt empfangene NOTICE-Meldung des PostgreSQL-Servers für eine gegebene Verbindung zurück. PostgreSQL sendet NOTICE-Meldungen, wenn SQL-Anweisungen Hinweise erzeugen – etwa bei der Verwendung von RAISE NOTICE in PL/pgSQL-Funktionen, bei automatischen Sequenz-Erstellungen oder anderen Warnungen, die keine Fehler darstellen.

Seit PHP 7.1.0 unterstützt die Funktion einen zweiten Parameter $option, der steuert, was zurückgegeben wird: PGSQL_NOTICE_LAST gibt nur die letzte Meldung als String zurück, PGSQL_NOTICE_ALL gibt alle seit dem Verbindungsaufbau gesammelten Meldungen als Array zurück, und PGSQL_NOTICE_CLEAR löscht alle gespeicherten Meldungen und gibt true zurück.

Diese Funktion ist besonders nützlich beim Debuggen von gespeicherten Prozeduren oder Triggern, die RAISE NOTICE verwenden, sowie für die Überwachung von DDL-Operationen, die implizit Sequenzen oder Indizes erzeugen. NOTICE-Meldungen sind keine Fehler und führen nicht zu einem Abbruch der Abfrage.

Hinweis: Damit Meldungen gesammelt werden, muss das PHP-Ini-Flag pgsql.ignore_notice auf 0 (deaktiviert) und pgsql.log_notice auf den gewünschten Wert gesetzt sein.

Parameter

Name Typ Default Beschreibung
$connection Pflicht PgSql\Connection Eine aktive PostgreSQL-Datenbankverbindung, die zuvor mit pg_connect() oder pg_pconnect() geöffnet wurde.
$option int PGSQL_NOTICE_LAST Steuert den Rückgabemodus: PGSQL_NOTICE_LAST (letzte Meldung als String), PGSQL_NOTICE_ALL (alle Meldungen als Array) oder PGSQL_NOTICE_CLEAR (Meldungsliste leeren, gibt true zurück). Seit PHP 7.1.0 verfügbar.

Rückgabewert

Typ
array|string|bool
Beschreibung
  • Bei PGSQL_NOTICE_LAST: Die letzte NOTICE-Meldung als string, oder ein leerer String wenn keine Meldung vorliegt.
  • Bei PGSQL_NOTICE_ALL: Ein array aller gesammelten NOTICE-Meldungen (kann leer sein).
  • Bei PGSQL_NOTICE_CLEAR: true bei Erfolg, false bei einem Fehler.

Beispiele

Letzte NOTICE-Meldung einer PL/pgSQL-Funktion auslesen

<?php
$conn = pg_connect("host=localhost dbname=testdb user=postgres password=secret");

if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

// Eine PL/pgSQL-Funktion mit RAISE NOTICE ausführen
pg_query($conn, "
    DO $$
    BEGIN
        RAISE NOTICE 'Verarbeitung gestartet: %', NOW();
        RAISE NOTICE 'Verarbeitung abgeschlossen.';
    END;
    $$;
");

// Nur die letzte NOTICE-Meldung ausgeben
$letzte = pg_last_notice($conn);
echo "Letzte Meldung: " . $letzte . PHP_EOL;

pg_close($conn);
Letzte Meldung: NOTICE: Verarbeitung abgeschlossen.

Alle NOTICE-Meldungen sammeln und danach löschen

<?php
$conn = pg_connect("host=localhost dbname=testdb user=postgres password=secret");

if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

// Mehrere NOTICE-Meldungen erzeugen
pg_query($conn, "
    DO $$
    BEGIN
        RAISE NOTICE 'Schritt 1 erledigt';
        RAISE NOTICE 'Schritt 2 erledigt';
        RAISE NOTICE 'Schritt 3 erledigt';
    END;
    $$;
");

// Alle gesammelten Meldungen abrufen
$alle = pg_last_notice($conn, PGSQL_NOTICE_ALL);
echo "Anzahl der Meldungen: " . count($alle) . PHP_EOL;
foreach ($alle as $index => $meldung) {
    echo ($index + 1) . ": " . $meldung . PHP_EOL;
}

// Meldungsliste leeren
pg_last_notice($conn, PGSQL_NOTICE_CLEAR);

$nachReset = pg_last_notice($conn, PGSQL_NOTICE_ALL);
echo "Meldungen nach Reset: " . count($nachReset) . PHP_EOL;

pg_close($conn);
Anzahl der Meldungen: 3 1: NOTICE: Schritt 1 erledigt 2: NOTICE: Schritt 2 erledigt 3: NOTICE: Schritt 3 erledigt Meldungen nach Reset: 0

// Wichtig · Fallstricke

PHP-Ini-Einstellungen beachten: Damit pg_last_notice() Meldungen liefern kann, muss in der php.ini das Flag pgsql.ignore_notice auf 0 gesetzt sein. Andernfalls werden alle NOTICE-Meldungen verworfen und die Funktion gibt stets einen leeren String zurück.

Die Optionskonstanten PGSQL_NOTICE_LAST, PGSQL_NOTICE_ALL und PGSQL_NOTICE_CLEAR sind erst seit PHP 7.1.0 verfügbar. In älteren Versionen gibt die Funktion immer nur die letzte Meldung als String zurück.

Ab PHP 8.1.0 erwartet der erste Parameter ein PgSql\Connection-Objekt. In früheren Versionen wurde eine Ressource vom Typ resource erwartet.