diff options
Diffstat (limited to 'src/backend/parser')
| -rw-r--r-- | src/backend/parser/analyze.c | 11 | 
1 files changed, 10 insertions, 1 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 1576613bc1a..70cdb593f73 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -346,8 +346,17 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt)  	 * We have three cases to deal with: DEFAULT VALUES (selectStmt == NULL),  	 * VALUES list, or general SELECT input.  We special-case VALUES, both for  	 * efficiency and so we can handle DEFAULT specifications. +	 * +	 * The grammar allows attaching ORDER BY, LIMIT, FOR UPDATE, or WITH to a +	 * VALUES clause.  If we have any of those, treat it as a general SELECT; +	 * so it will work, but you can't use DEFAULT items together with those.  	 */ -	isGeneralSelect = (selectStmt && selectStmt->valuesLists == NIL); +	isGeneralSelect = (selectStmt && (selectStmt->valuesLists == NIL || +									  selectStmt->sortClause != NIL || +									  selectStmt->limitOffset != NULL || +									  selectStmt->limitCount != NULL || +									  selectStmt->lockingClause != NIL || +									  selectStmt->withClause != NULL));  	/*  	 * If a non-nil rangetable/namespace was passed in, and we are doing  | 
