]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
In COPY FROM, fail cleanly when unsupported encoding conversion is needed.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 1 Oct 2023 16:09:26 +0000 (12:09 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 1 Oct 2023 16:09:26 +0000 (12:09 -0400)
In recent releases, such cases fail with "cache lookup failed for
function 0" rather than complaining that the conversion function
doesn't exist as prior versions did.  Seems to be a consequence of
sloppy refactoring in commit f82de5c46.  Add the missing error check.

Per report from Pierre Fortin.  Back-patch to v14 where the
oversight crept in.

Discussion: https://postgr.es/m/20230929163739.3bea46e5.pfortin@pfortin.com

src/backend/commands/copyfrom.c

index 65b3e56cd49c6429c7806061cbcb32a39aa1ec0d..81aef4aca8a6fb729441b5bdbddd584bacf52c3e 100644 (file)
@@ -1481,6 +1481,12 @@ BeginCopyFrom(ParseState *pstate,
                cstate->need_transcoding = true;
                cstate->conversion_proc = FindDefaultConversionProc(cstate->file_encoding,
                                                                                                                        GetDatabaseEncoding());
+               if (!OidIsValid(cstate->conversion_proc))
+                       ereport(ERROR,
+                                       (errcode(ERRCODE_UNDEFINED_FUNCTION),
+                                        errmsg("default conversion function for encoding \"%s\" to \"%s\" does not exist",
+                                                       pg_encoding_to_char(cstate->file_encoding),
+                                                       pg_encoding_to_char(GetDatabaseEncoding()))));
        }
 
        cstate->copy_src = COPY_FILE;   /* default */