PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erzielen performanter Transaktionen bei der Erweiterung von PostgreSQL um C-Funktionen

Es hört sich so an, als ob Sie wahrscheinlich das Server Programming Interface (SPI) um eine gespeicherte Prozedur als C-Sprachfunktion zu implementieren läuft im PostgreSQL-Back-End.

Verwenden Sie SPI_connect zum Einrichten des SPI.

Jetzt SPI_prepare_cursor eine Abfrage, dann SPI_cursor_open es. SPI_cursor_fetch Zeilen daraus und SPI_cursor_close es wenn fertig. Beachten Sie, dass SPI_cursor_fetch ermöglicht Ihnen das Abrufen von Stapeln von Zeilen.

SPI_finish zu bereinigen, wenn Sie fertig sind.

Sie können die Ergebniszeilen während der Generierung in einen Tuplestore zurückgeben, sodass Sie nicht die gesamte Tabelle im Speicher erstellen müssen. Sehen Sie sich Beispiele in einer der Set-Returning-Funktionen im PostgreSQL-Quellcode an. Vielleicht möchten Sie sich auch SPI_returntuple Hilfsfunktion.

Siehe auch:C-Sprachfunktionen und SQL erweitern .

Wenn maximale Geschwindigkeit von Interesse ist, möchte Ihr Client möglicherweise das libpq-Binärprotokoll über libpqtypes verwenden so empfängt es die von Ihrem serverseitigen SPI-verwendenden Verfahren erzeugten Daten mit minimalem Overhead.