For the libpq interface: I need to be able to know if a column in a result from a query is nullable or not. From reading the documentation it seems that I can obtain the following information: . scan all the rows in the result and see if there exists a null value for each column... . backtrack the column to the source table (assuming a non-calculated field) and check the nullable status there Neither of the above is particularly cheap to do... Which leads me to my next question... If I executed a select against a table with a million rows, and the query returned all of the rows, what happens? Are all the rows read into memory on the client before returning the result? Or are rows only fetched from the server as required? Thanks James