Hello all, With the current implementation of COPY FROM in PostgreSQL we are able to load the DEFAULT value/expression of a column if the column is absent in the list of specified columns. We are not able to explicitly ask that PostgreSQL uses the DEFAULT value/expression in a column that is being fetched from the input file, though.
This patch adds support for handling DEFAULT values in COPY FROM. It works similarly to NULL in COPY FROM: whenever the marker that was set for DEFAULT value/expression is read from the input stream, it will evaluate the DEFAULT value/expression of the corresponding column. I'm currently working as a support engineer, and both me and some customers had already faced a situation where we missed an implementation like this in COPY FROM, and had to work around that by using an input file where the column which has a DEFAULT value/expression was removed. That does not solve all issues though, as it might be the case that we just want a DEFAULT value to take place if no other value was set for the column in the input file, meaning we would like to have a column in the input file that sometimes assume the DEFAULT value/expression, and sometimes assume an actual given value. The implementation was performed about one month ago and included all regression tests regarding the changes that were introduced. It was just rebased on top of the master branch before submitting this patch, and all tests are still succeeding. The implementation takes advantage of the logic that was already implemented to handle DEFAULT values for missing columns in COPY FROM. I just modified it to make it available the DEFAULT values/expressions for all columns instead of only for the ones that were missing in the specification. I had to change the variables accordingly, so it would index the correct positions in the new array of DEFAULT values/expressions. Besides that, I also copied and pasted most of the checks that are performed for the NULL feature of COPY FROM, as the DEFAULT behaves somehow similarly. Best regards, Israel.
v1-0001-Added-support-for-DEFAULT-in-COPY-FROM.patch
Description: Binary data