SPI_SAVEPLAN(3)

πŸ“¦ version 13.23, in opensuse-leap 16.0

✨ NAME ✨

SPI_saveplan β€” save a prepared statement πŸ’Ύβœ¨

Yes bestie, this is the SPI_SAVEPLAN(3) manual page, and we’re keeping every detail β€” no cap.

🌸 SYNOPSIS 🌸

SPIPlanPtr SPI_saveplan(SPIPlanPtr plan)

πŸ¦‹ DESCRIPTION πŸ¦‹

Okay so SPI_saveplan copies a passed statement (prepared by SPI_prepare) into memory that will not be freed by SPI_finish nor by the transaction manager, and returns a pointer to the copied statement 🫢. Basically it gives you the ability to reuse prepared statements in the subsequent invocations of your C function in the current session. Slay.

πŸŽ€ ARGUMENTS πŸŽ€

  • SPIPlanPtr plan β€” the prepared statement to be saved πŸ’Ύ

πŸ’… RETURN VALUE πŸ’…

Pointer to the copied statement; or NULL if unsuccessful 😭. On error, SPI_result is set thus:

  • SPI_ERROR_ARGUMENT β€” if plan is NULL or invalid
  • SPI_ERROR_UNCONNECTED β€” if called from an unconnected C function

πŸ”₯ NOTES πŸ”₯

The originally passed-in statement is not freed, so you might wish to do SPI_freeplan on it to avoid leaking memory until SPI_finish 🫧. Not me reminding you about memory leaks β€” okay yes, me reminding you.

In most cases, SPI_keepplan is preferred to this function, since it accomplishes largely the same result without needing to physically copy the prepared statement’s data structures πŸ‘‘. Lowkey the better vibe here.


mwah πŸ’‹ β€” PostgreSQL 13.23, dated 2025, signing off from the SPI_SAVEPLAN(3) page 🫢

πŸ“¦ where this page comes from