@@ -520,6 +520,50 @@ BEGIN;
520520COPY forcetest (d, e) FROM STDIN WITH (FORMAT csv, FORCE_NULL(b));
521521ERROR: FORCE_NULL column "b" not referenced by COPY
522522ROLLBACK;
523+ -- should succeed with no effect ("b" remains an empty string, "c" remains NULL)
524+ BEGIN;
525+ COPY forcetest (a, b, c) FROM STDIN WITH (FORMAT csv, FORCE_NOT_NULL *, FORCE_NULL *);
526+ COMMIT;
527+ SELECT b, c FROM forcetest WHERE a = 4;
528+ b | c
529+ ---+------
530+ | NULL
531+ (1 row)
532+
533+ -- should succeed with effect ("b" remains an empty string)
534+ BEGIN;
535+ COPY forcetest (a, b, c) FROM STDIN WITH (FORMAT csv, FORCE_NOT_NULL *);
536+ COMMIT;
537+ SELECT b, c FROM forcetest WHERE a = 5;
538+ b | c
539+ ---+---
540+ |
541+ (1 row)
542+
543+ -- should succeed with effect ("c" remains NULL)
544+ BEGIN;
545+ COPY forcetest (a, b, c) FROM STDIN WITH (FORMAT csv, FORCE_NULL *);
546+ COMMIT;
547+ SELECT b, c FROM forcetest WHERE a = 6;
548+ b | c
549+ ---+------
550+ b | NULL
551+ (1 row)
552+
553+ -- should fail with "conflicting or redundant options" error
554+ BEGIN;
555+ COPY forcetest (a, b, c) FROM STDIN WITH (FORMAT csv, FORCE_NOT_NULL *, FORCE_NOT_NULL(b));
556+ ERROR: conflicting or redundant options
557+ LINE 1: ...c) FROM STDIN WITH (FORMAT csv, FORCE_NOT_NULL *, FORCE_NOT_...
558+ ^
559+ ROLLBACK;
560+ -- should fail with "conflicting or redundant options" error
561+ BEGIN;
562+ COPY forcetest (a, b, c) FROM STDIN WITH (FORMAT csv, FORCE_NULL *, FORCE_NULL(b));
563+ ERROR: conflicting or redundant options
564+ LINE 1: ... b, c) FROM STDIN WITH (FORMAT csv, FORCE_NULL *, FORCE_NULL...
565+ ^
566+ ROLLBACK;
523567\pset null ''
524568-- test case with whole-row Var in a check constraint
525569create table check_con_tbl (f1 int);
0 commit comments