Chapter 4. Returning Structured Data
In the previous chapter, we have seen functions that return single values. They returned either a "scalar", simple types such as integer, text, or data, or a more complex type similar to a row in the database table. In this chapter, we will expand these concepts and show how you can return your data to the client in much more powerful ways.
In this chapter, we will examine multiple rows of both scalar types, as well as learn about several ways of defining complex types for function return values.
We will also examine differences between SETOF scalars, or rows and arrays of the same. Later, we will also examine returning CURSORs, which are kind of "lazy" tables, that is something that can be used to get a set of rows but may not yet have actually evaluated or fetched the rows. As the modern world is not about rigidly table-structured data, we will also examine ways of dealing with more complex data structures, both predefined and dynamically created.
But...