Hmm..  This might not actually be possible.  I'm pretty sure you can't prepare a COPY statement, so you would have to know whether it's a COPY before trying to prepare it.  Or you could try to prepare a COPY and catch the exception, but that seems quite awful..

Seems like this would have to go through the Query() interface instead; in simpleQuery() we can distinguish between a COPY and a "normal" query.  Rows.Scan() could be used instead of Stmt.Exec(), and I believe Rows.Close() returns the error from the driver if it returns one, so that would also solve the nil Exec issue.  But I might be missing something.  Thoughts?