Signatur
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
- Bei
PGSQL_NOTICE_LAST: Die letzte NOTICE-Meldung alsstring, oder ein leerer String wenn keine Meldung vorliegt. - Bei
PGSQL_NOTICE_ALL: Einarrayaller gesammelten NOTICE-Meldungen (kann leer sein). - Bei
PGSQL_NOTICE_CLEAR:truebei Erfolg,falsebei 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);
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);
// 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.