diff --git a/src/fe_utils/print.c b/src/fe_utils/print.c index 3b07280..d31b6af 100644 --- a/src/fe_utils/print.c +++ b/src/fe_utils/print.c @@ -1793,7 +1793,16 @@ print_csv_text(const printTableContent *cont, FILE *fout) if (cont->opt->start_table && !cont->opt->tuples_only) { /* print headers */ - for (ptr = cont->headers; *ptr; ptr++) + + /* + * A \. alone on a line must be quoted to be compatible with COPY CSV, + * for which \. is an end-of-data marker. + */ + if (cont->ncolumns == 1 && strcmp(*cont->headers, "\\.") == 0) + { + csv_escaped_print(*cont->headers, fout); + } + else for (ptr = cont->headers; *ptr; ptr++) { if (ptr != cont->headers) fputs(cont->opt->fieldSepCsv, fout); @@ -1805,7 +1814,14 @@ print_csv_text(const printTableContent *cont, FILE *fout) /* print cells */ for (i = 0, ptr = cont->cells; *ptr; i++, ptr++) { - csv_print_field(*ptr, fout, cont->opt->fieldSepCsv); + /* + * A \. alone on a line must be quoted to be compatible with COPY CSV, + * for which \. is an end-of-data marker. + */ + if (cont->ncolumns == 1 && strcmp(*ptr, "\\.") == 0) + csv_escaped_print(*ptr, fout); + else + csv_print_field(*ptr, fout, cont->opt->fieldSepCsv); if ((i + 1) % cont->ncolumns) fputs(cont->opt->fieldSepCsv, fout); else