Produce proper error message for COPY (SELECT INTO)
authorTomas Vondra <[email protected]>
Sun, 30 Jul 2017 15:27:36 +0000 (17:27 +0200)
committerTomas Vondra <[email protected]>
Mon, 31 Jul 2017 01:21:10 +0000 (03:21 +0200)
Produce the right error message for COPY (SELECT INTO) queries, that is

    ERROR: COPY (SELECT INTO) is not supported

instead of the incorrect

    ERROR: COPY query must have a RETURNING clause

The root cause is that the check in BeginCopy() was testing raw_query,
but XL wraps the original command in RawStmt, so we should be checking
raw_query->stmt instead.

src/backend/commands/copy.c

index 37d9a898cf0f8102052010c2c7593154d848d227..a5122e61f60d221c74190bde8ecb9e5120f78311 100644 (file)
@@ -1567,9 +1567,9 @@ BeginCopy(ParseState *pstate,
                 * will ultimately lead to an error, but doing it here allows us to
                 * throw a more friendly and PG-compatible error.
                 */
-               if (IsA(raw_query, SelectStmt))
+               if (IsA(raw_query->stmt, SelectStmt))
                {
-                       SelectStmt *stmt = (SelectStmt *) raw_query;
+                       SelectStmt *stmt = (SelectStmt *) raw_query->stmt;
 
                        /*
                         * If it's a set-operation tree, drilldown to leftmost SelectStmt