Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rFYGN-00AWyz-8r for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Dec 2023 11:27:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rFYGM-0006lj-0F for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Dec 2023 11:27:50 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rFYGL-0006lb-IQ for pgsql-hackers@lists.postgresql.org; Tue, 19 Dec 2023 11:27:49 +0000 Received: from mail.verite.pro ([185.16.44.216]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rFYGI-00B9un-JP for pgsql-hackers@postgresql.org; Tue, 19 Dec 2023 11:27:48 +0000 Received: by mail.verite.pro (Postfix, from userid 1000) id 513248C010F; Tue, 19 Dec 2023 12:27:44 +0100 (CET) MIME-Version: 1.0 From: "Daniel Verite" Subject: Re: Fixing backslash dot for COPY FROM...CSV To: "vignesh C" Cc: pgsql-hackers@postgresql.org In-Reply-To: Date: Tue, 19 Dec 2023 12:27:42 +0100 Message-Id: <984e45ea-591a-4f6e-8f1f-165589495500@manitou-mail.org> X-Mailer: Manitou v1.7.3 Content-type: multipart/mixed; boundary="----------=_1702985264-31220-7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format... ------------=_1702985264-31220-7 Content-Type: text/plain; charset="iso-8859-15" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable vignesh C wrote: > I noticed that these tests are passing without applying patch too: > +insert into copytest2(test) values('line1'), ('\.'), ('line2'); > +copy (select test from copytest2 order by test collate "C") to :'filenam= e' > csv; > +-- get the data back in with copy > +truncate copytest2; > +copy copytest2(test) from :'filename' csv; > +select test from copytest2 order by test collate "C"; >=20 > I was not sure if this was intentional. Can we add a test which fails > in HEAD and passes with the patch applied. Thanks for checking this out. Indeed, that was not intentional. I've been using static files in my tests and forgot that if the data was produced with COPY OUT, it would quote backslash-dot so that COPY IN could reload it without problem. PFA an updated version that uses \qecho to produce the data instead of COPY OUT. This test on unpatched HEAD shows that copytest2 is missing 2 rows after COPY IN. Best regards, --=20 Daniel V=E9rit=E9 https://postgresql.verite.pro/ Twitter: @DanielVerite ------------=_1702985264-31220-7 Content-Type: text-x-patch; name="v2-0001-Support-backslash-dot-on-a-line-by-itself-as-vali.patch" Content-Disposition: attachment; filename="v2-0001-Support-backslash-dot-on-a-line-by-itself-as-vali.patch" Content-Transfer-Encoding: base64 RnJvbSAwMTM3OTYzMTM0YWM4OGIwMDlhOGU5M2Q2YTM5Y2FiZmFlZmU0M2Y1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/RGFu aWVsPTIwVj1DMz1BOXJpdD1DMz1BOT89IDxkYW5pZWxAbWFuaXRvdS1tYWls Lm9yZz4KRGF0ZTogVHVlLCAxOSBEZWMgMjAyMyAxMTo0OTozNSArMDEwMApT dWJqZWN0OiBbUEFUQ0ggdjJdIFN1cHBvcnQgYmFja3NsYXNoLWRvdCBvbiBh IGxpbmUgYnkgaXRzZWxmIGFzIHZhbGlkIGRhdGEgaW4KIENPUFkgRlJPTS4u LkNTVgoKLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwgICAg ICAgfCAgNCAtLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBh cnNlLmMgfCAxMyArKy0tLS0tLS0tLQogc3JjL2Jpbi9wc3FsL2NvcHkuYyAg ICAgICAgICAgICAgICAgIHwgMzIgKysrKysrKysrKysrKysrKysrKystLS0t LS0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dCAgIHwg MTggKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29w eS5zcWwgICAgICAgIHwgMTIgKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdl ZCwgNTUgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sCmluZGV4IGNjN2Q3OTcxNTkuLmQ5 NGUzY2FjZmMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1y ZWYuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwK QEAgLTExMTksMTAgKzExMTksNiBAQCBJTlNFUlQgSU5UTyB0YmwxIFZBTFVF UyAoJDEsICQyKSBcYmluZCAnZmlyc3QgdmFsdWUnICdzZWNvbmQgdmFsdWUn IFxnCiAgICAgICAgIGRlc3RpbmF0aW9uLCBiZWNhdXNlIGFsbCBkYXRhIG11 c3QgcGFzcyB0aHJvdWdoIHRoZSBjbGllbnQvc2VydmVyCiAgICAgICAgIGNv bm5lY3Rpb24uICBGb3IgbGFyZ2UgYW1vdW50cyBvZiBkYXRhIHRoZSA8YWNy b255bT5TUUw8L2Fjcm9ueW0+CiAgICAgICAgIGNvbW1hbmQgbWlnaHQgYmUg cHJlZmVyYWJsZS4KLSAgICAgICAgQWxzbywgYmVjYXVzZSBvZiB0aGlzIHBh c3MtdGhyb3VnaCBtZXRob2QsIDxsaXRlcmFsPlxjb3B5Ci0gICAgICAgIC4u LiBmcm9tPC9saXRlcmFsPiBpbiA8YWNyb255bT5DU1Y8L2Fjcm9ueW0+IG1v ZGUgd2lsbCBlcnJvbmVvdXNseQotICAgICAgICB0cmVhdCBhIDxsaXRlcmFs PlwuPC9saXRlcmFsPiBkYXRhIHZhbHVlIGFsb25lIG9uIGEgbGluZSBhcyBh bgotICAgICAgICBlbmQtb2YtaW5wdXQgbWFya2VyLgogICAgICAgICA8L3Bh cmE+CiAgICAgICAgIDwvdGlwPgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5ZnJvbXBhcnNlLmMKaW5kZXggZjU1MzczNDU4Mi4uYjRjMjkx YjI1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZy b21wYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9t cGFyc2UuYwpAQCAtMTEzNyw3ICsxMTM3LDYgQEAgQ29weVJlYWRMaW5lVGV4 dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAlib29sCQlyZXN1bHQgPSBmYWxz ZTsKIAogCS8qIENTViB2YXJpYWJsZXMgKi8KLQlib29sCQlmaXJzdF9jaGFy X2luX2xpbmUgPSB0cnVlOwogCWJvb2wJCWluX3F1b3RlID0gZmFsc2UsCiAJ CQkJbGFzdF93YXNfZXNjID0gZmFsc2U7CiAJY2hhcgkJcXVvdGVjID0gJ1ww JzsKQEAgLTEzMzUsMTAgKzEzMzQsOSBAQCBDb3B5UmVhZExpbmVUZXh0KENv cHlGcm9tU3RhdGUgY3N0YXRlKQogCQl9CiAKIAkJLyoKLQkJICogSW4gQ1NW IG1vZGUsIHdlIG9ubHkgcmVjb2duaXplIFwuIGFsb25lIG9uIGEgbGluZS4g IFRoaXMgaXMgYmVjYXVzZQotCQkgKiBcLiBpcyBhIHZhbGlkIENTViBkYXRh IHZhbHVlLgorCQkgKiBJbiBDU1YgbW9kZSwgXC4gaXMgYSB2YWxpZCBDU1Yg ZGF0YSB2YWx1ZSBhbnl3aGVyZSBpbiB0aGUgbGluZS4KIAkJICovCi0JCWlm IChjID09ICdcXCcgJiYgKCFjc3RhdGUtPm9wdHMuY3N2X21vZGUgfHwgZmly c3RfY2hhcl9pbl9saW5lKSkKKwkJaWYgKGMgPT0gJ1xcJyAmJiAhY3N0YXRl LT5vcHRzLmNzdl9tb2RlKQogCQl7CiAJCQljaGFyCQljMjsKIApAQCAtMTQ0 MiwxNCArMTQ0MCw3IEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0 ZSBjc3RhdGUpCiAJCQl9CiAJCX0KIAotCQkvKgotCQkgKiBUaGlzIGxhYmVs IGlzIGZvciBDU1YgY2FzZXMgd2hlcmUgXC4gYXBwZWFycyBhdCB0aGUgc3Rh cnQgb2YgYQotCQkgKiBsaW5lLCBidXQgdGhlcmUgaXMgbW9yZSB0ZXh0IGFm dGVyIGl0LCBtZWFuaW5nIGl0IHdhcyBhIGRhdGEgdmFsdWUuCi0JCSAqIFdl IGFyZSBtb3JlIHN0cmljdCBmb3IgXC4gaW4gQ1NWIG1vZGUgYmVjYXVzZSBc LiBjb3VsZCBiZSBhIGRhdGEKLQkJICogdmFsdWUsIHdoaWxlIGluIG5vbi1D U1YgbW9kZSwgXC4gY2Fubm90IGJlIGEgZGF0YSB2YWx1ZS4KLQkJICovCiBu b3RfZW5kX29mX2NvcHk6Ci0JCWZpcnN0X2NoYXJfaW5fbGluZSA9IGZhbHNl OwogCX0JCQkJCQkJLyogZW5kIG9mIG91dGVyIGxvb3AgKi8KIAogCS8qCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29weS5jIGIvc3JjL2Jpbi9wc3Fs L2NvcHkuYwppbmRleCBkYmJiZGI4ODk4Li5mMzFhN2FjYmI2IDEwMDY0NAot LS0gYS9zcmMvYmluL3BzcWwvY29weS5jCisrKyBiL3NyYy9iaW4vcHNxbC9j b3B5LmMKQEAgLTYyMCwyMCArNjIwLDM0IEBAIGhhbmRsZUNvcHlJbihQR2Nv bm4gKmNvbm4sIEZJTEUgKmNvcHlzdHJlYW0sIGJvb2wgaXNiaW5hcnksIFBH cmVzdWx0ICoqcmVzKQogCQkJCS8qIGN1cnJlbnQgbGluZSBpcyBkb25lPyAq LwogCQkJCWlmIChidWZbYnVmbGVuIC0gMV0gPT0gJ1xuJykKIAkJCQl7Ci0J CQkJCS8qIGNoZWNrIGZvciBFT0YgbWFya2VyLCBidXQgbm90IG9uIGEgcGFy dGlhbCBsaW5lICovCi0JCQkJCWlmIChhdF9saW5lX2JlZ2luKQorCQkJCQkv KgorCQkJCQkgKiBXaGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUs IGNoZWNrIGZvciBFT0YgbWFya2VyLgorCQkJCQkgKiBJZiB0aGUgbWFya2Vy IGlzIGZvdW5kIGFuZCB0aGUgZGF0YSBpcyBpbmxpbmVkLAorCQkJCQkgKiB3 ZSBtdXN0IHN0b3AgYXQgdGhpcyBwb2ludC4gIElmIG5vdCwgdGhlIFwuIGxp bmUgY2FuIGJlCisJCQkJCSAqIHNlbnQgdG8gdGhlIHNlcnZlciwgYW5kIHdl IGxldCBpdCBkZWNpZGUgd2hldGhlcgorCQkJCQkgKiBpdCdzIGFuIEVPRiBv ciBub3QgZGVwZW5kaW5nIG9uIHRoZSBmb3JtYXQ6IGluCisJCQkJCSAqIGJh c2ljIFRFWFQsIFwuIGlzIGdvaW5nIHRvIGJlIGludGVycHJldGVkIGFzIGFu IEVPRiwgaW4KKwkJCQkJICogQ1NWLCBpdCB3aWxsIG5vdC4KKwkJCQkJICov CisJCQkJCWlmIChhdF9saW5lX2JlZ2luICYmIGNvcHlzdHJlYW0gPT0gcHNl dC5jdXJfY21kX3NvdXJjZSkKIAkJCQkJewotCQkJCQkJLyoKLQkJCQkJCSAq IFRoaXMgY29kZSBlcnJvbmVvdXNseSBhc3N1bWVzICdcLicgb24gYSBsaW5l IGFsb25lCi0JCQkJCQkgKiBpbnNpZGUgYSBxdW90ZWQgQ1NWIHN0cmluZyB0 ZXJtaW5hdGVzIHRoZSBcY29weS4KLQkJCQkJCSAqIGh0dHBzOi8vd3d3LnBv c3RncmVzcWwub3JnL21lc3NhZ2UtaWQvRTFUZE5WUS0wMDAxanUtR09Ad3Jp Z2xleXMucG9zdGdyZXNxbC5vcmcKLQkJCQkJCSAqCi0JCQkJCQkgKiBodHRw czovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2JmY2Q1N2U0LThm MjMtNGMzZS1hNWRiLTI1NzFkMDkyMDhlMkBiZXRhLmZhc3RtYWlsLmNvbQot CQkJCQkJICovCiAJCQkJCQlpZiAoKGxpbmVsZW4gPT0gMyAmJiBtZW1jbXAo ZmdyZXN1bHQsICJcXC5cbiIsIDMpID09IDApIHx8CiAJCQkJCQkJKGxpbmVs ZW4gPT0gNCAmJiBtZW1jbXAoZmdyZXN1bHQsICJcXC5cclxuIiwgNCkgPT0g MCkpCiAJCQkJCQl7CiAJCQkJCQkJY29weWRvbmUgPSB0cnVlOworCQkJCQkJ CS8qCisJCQkJCQkJICogUmVtb3ZlIHRoZSBFT0YgbWFya2VyIGZyb20gdGhl IGRhdGEgc2VudCwgdW5sZXNzCisJCQkJCQkJICogdXNpbmcgdGhlIG9ic29s ZXRlIHYyIHByb3RvY29sIHRoYXQgbmVlZHMgaXQuCisJCQkJCQkJICogSW4g dGhlIGNhc2Ugb2YgQ1NWLCB0aGUgRU9GIG1hcmtlciBtdXN0IGJlCisJCQkJ CQkJICogcmVtb3ZlZCwgb3RoZXJ3aXNlIGl0IHdvdWxkIGJlIGludGVycHJl dGVkIGJ5CisJCQkJCQkJICogdGhlIHNlcnZlciBhcyB2YWxpZCBkYXRhLgor CQkJCQkJCSAqLworCQkJCQkJCWlmIChjb3B5c3RyZWFtID09IHBzZXQuY3Vy X2NtZF9zb3VyY2UgJiYKKwkJCQkJCQkJUFFwcm90b2NvbFZlcnNpb24oY29u bikgPj0gMykKKwkJCQkJCQl7CisJCQkJCQkJCSpmZ3Jlc3VsdD0nXDAnOwor CQkJCQkJCQlidWZsZW4gLT0gbGluZWxlbjsKKwkJCQkJCQl9CiAJCQkJCQl9 CiAJCQkJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9jb3B5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29w eS5vdXQKaW5kZXggYjQ4MzY1ZWM5OC4uNjQ1ZTg0OWJiZCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0CkBAIC0zMiw2ICsz MiwyNCBAQCBzZWxlY3QgKiBmcm9tIGNvcHl0ZXN0IGV4Y2VwdCBzZWxlY3Qg KiBmcm9tIGNvcHl0ZXN0MjsKIC0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tCiAo MCByb3dzKQogCistLS0gdGVzdCB1bnF1b3RlZCBcLiBhcyBkYXRhIGluc2lk ZSBDU1YKKy0tIGRvIG5vdCB1c2UgY29weSBvdXQgdG8gZXhwb3J0IHRoZSBk YXRhLCBhcyBpdCB3b3VsZCBxdW90ZSBcLgorXG8gOmZpbGVuYW1lCitccWVj aG8gbGluZTEKK1xxZWNobyAnXFwuJworXHFlY2hvIGxpbmUyCitcbworLS0g Z2V0IHRoZSBkYXRhIGJhY2sgaW4gd2l0aCBjb3B5Cit0cnVuY2F0ZSBjb3B5 dGVzdDI7Citjb3B5IGNvcHl0ZXN0Mih0ZXN0KSBmcm9tIDonZmlsZW5hbWUn IGNzdjsKK3NlbGVjdCB0ZXN0IGZyb20gY29weXRlc3QyIG9yZGVyIGJ5IHRl c3QgY29sbGF0ZSAiQyI7CisgdGVzdCAgCistLS0tLS0tCisgXC4KKyBsaW5l MQorIGxpbmUyCisoMyByb3dzKQorCiAtLSB0ZXN0IGhlYWRlciBsaW5lIGZl YXR1cmUKIGNyZWF0ZSB0ZW1wIHRhYmxlIGNvcHl0ZXN0MyAoCiAJYzEgaW50 LApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNxbAppbmRleCA0M2QyZTkw NmRkLi42OGE1ODc0MGNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9jb3B5LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5 LnNxbApAQCAtMzgsNiArMzgsMTggQEAgY29weSBjb3B5dGVzdDIgZnJvbSA6 J2ZpbGVuYW1lJyBjc3YgcXVvdGUgJycnJyBlc2NhcGUgRSdcXCc7CiAKIHNl bGVjdCAqIGZyb20gY29weXRlc3QgZXhjZXB0IHNlbGVjdCAqIGZyb20gY29w eXRlc3QyOwogCistLS0gdGVzdCB1bnF1b3RlZCBcLiBhcyBkYXRhIGluc2lk ZSBDU1YKKy0tIGRvIG5vdCB1c2UgY29weSBvdXQgdG8gZXhwb3J0IHRoZSBk YXRhLCBhcyBpdCB3b3VsZCBxdW90ZSBcLgorXG8gOmZpbGVuYW1lCitccWVj aG8gbGluZTEKK1xxZWNobyAnXFwuJworXHFlY2hvIGxpbmUyCitcbworLS0g Z2V0IHRoZSBkYXRhIGJhY2sgaW4gd2l0aCBjb3B5Cit0cnVuY2F0ZSBjb3B5 dGVzdDI7Citjb3B5IGNvcHl0ZXN0Mih0ZXN0KSBmcm9tIDonZmlsZW5hbWUn IGNzdjsKK3NlbGVjdCB0ZXN0IGZyb20gY29weXRlc3QyIG9yZGVyIGJ5IHRl c3QgY29sbGF0ZSAiQyI7CisKIAogLS0gdGVzdCBoZWFkZXIgbGluZSBmZWF0 dXJlCiAKLS0gCjIuMzQuMQoK ------------=_1702985264-31220-7--