*** a/src/interfaces/ecpg/preproc/ecpg.addons
--- b/src/interfaces/ecpg/preproc/ecpg.addons
***************
*** 193,207 **** ECPG: where_or_current_clauseWHERECURRENT_POFcursor_name block
  		$$ = cat_str(2,mm_strdup("where current of"), cursor_marker);
  	}
  ECPG: CopyStmtCOPYopt_binaryqualified_nameopt_column_listopt_oidscopy_fromcopy_file_namecopy_delimiteropt_withcopy_options addon
! 			if (strcmp($6, "to") == 0 && strcmp($7, "stdin") == 0)
! 				mmerror(PARSE_ERROR, ET_ERROR, "COPY TO STDIN is not possible");
! 			else if (strcmp($6, "from") == 0 && strcmp($7, "stdout") == 0)
! 				mmerror(PARSE_ERROR, ET_ERROR, "COPY FROM STDOUT is not possible");
! 			else if (strcmp($6, "from") == 0 && strcmp($7, "stdin") == 0)
  				mmerror(PARSE_ERROR, ET_WARNING, "COPY FROM STDIN is not implemented");
- ECPG: CopyStmtCOPYselect_with_parensTOcopy_file_nameopt_withcopy_options addon
- 			if (strcmp($4, "stdin") == 0)
- 				mmerror(PARSE_ERROR, ET_ERROR, "COPY TO STDIN is not possible");
  ECPG: var_valueNumericOnly addon
  		if ($1[0] == '$')
  		{
--- 193,201 ----
  		$$ = cat_str(2,mm_strdup("where current of"), cursor_marker);
  	}
  ECPG: CopyStmtCOPYopt_binaryqualified_nameopt_column_listopt_oidscopy_fromcopy_file_namecopy_delimiteropt_withcopy_options addon
! 			if (strcmp($6, "from") == 0 &&
! 			   (strcmp($7, "stdin") == 0 || strcmp($7, "stdout") == 0))
  				mmerror(PARSE_ERROR, ET_WARNING, "COPY FROM STDIN is not implemented");
  ECPG: var_valueNumericOnly addon
  		if ($1[0] == '$')
  		{
