public inbox for [email protected]
help / color / mirror / Atom feedPatch for migration of the pg_commit_ts directory v2
5+ messages / 2 participants
[nested] [flat]
* Patch for migration of the pg_commit_ts directory v2
@ 2025-10-04 16:08 ls7777 <[email protected]>
0 siblings, 1 reply; 5+ messages in thread
From: ls7777 @ 2025-10-04 16:08 UTC (permalink / raw)
To: [email protected] <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; +Cc: pgsql-hackers
------==--bound.172831.11ea6385-4c34-4862-b367-c3ba17df0f70
Content-Transfer-Encoding: 8bit
Content-Type: text/html; charset=utf-8
<div>Hi</div><div> </div><div><div>Thank you all for the helpful tips. Many thanks to Alex Orlov for the test. He works.</div><div>I made a second version of the patch and took into account all the comments.</div><div><div>Patch description: When checking a new cluster, the value of the track_commit_timestamp parameter is determined. </div><div>If this parameter is set and the Latest checkpoint's oldestCommitTsXid and Latest checkpoint's newestCommitTsXid are set in the old cluster, then pg_comit_ts is copied.</div><div><div>The files were processed by pgindent.</div><div> </div></div></div><div> </div></div><div> </div>
------==--bound.172831.11ea6385-4c34-4862-b367-c3ba17df0f70
Content-Disposition: attachment;
filename="v2-0001-Migration-of-the-pg_commit_ts-directory.patch"
Content-Transfer-Encoding: base64
Content-Type: text/x-diff;
name="v2-0001-Migration-of-the-pg_commit_ts-directory.patch"
RnJvbSAyNGE4YTYzMTMxM2EyMzZhNzQ1ZDQ4ZGQ0YmQ1ZTQwZjQxM2RlN2UwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnZXkgTGV2aW4gPGxzNzc3N0B5YW5kZXgucnU+CkRhdGU6
IFNhdCwgNCBPY3QgMjAyNSAyMDoyMjo0NiArMDUwMApTdWJqZWN0OiBbUEFUQ0hdIE1pZ3JhdGlv
biBvZiB0aGUgcGdfY29tbWl0X3RzIGRpcmVjdG9yeQoKLS0tCiBzcmMvYmluL3BnX3VwZ3JhZGUv
Y2hlY2suYyAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9wZ191cGdyYWRlL2Nv
bnRyb2xkYXRhLmMgICAgICAgICAgICAgIHwgIDI2ICsrKy0KIHNyYy9iaW4vcGdfdXBncmFkZS9p
bmZvLmMgICAgICAgICAgICAgICAgICAgICB8ICAyMSArKysKIHNyYy9iaW4vcGdfdXBncmFkZS9w
Z191cGdyYWRlLmMgICAgICAgICAgICAgICB8ICAyMSArKy0KIHNyYy9iaW4vcGdfdXBncmFkZS9w
Z191cGdyYWRlLmggICAgICAgICAgICAgICB8ICAgNSArCiAuLi4vcGdfdXBncmFkZS90LzAwN190
cmFuc2Zlcl9jb21taXRfdHMucGwgICAgfCAxMjkgKysrKysrKysrKysrKysrKysrCiA2IGZpbGVz
IGNoYW5nZWQsIDIwMCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS90LzAwN190cmFuc2Zlcl9jb21taXRfdHMucGwKCmRp
ZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvY2hlY2suYyBiL3NyYy9iaW4vcGdfdXBncmFk
ZS9jaGVjay5jCmluZGV4IDFlMTdkNjRiM2VjLi5iMTc2MDNkMTFiYiAxMDA2NDQKLS0tIGEvc3Jj
L2Jpbi9wZ191cGdyYWRlL2NoZWNrLmMKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL2NoZWNrLmMK
QEAgLTc2Nyw2ICs3NjcsOCBAQCBjaGVja19uZXdfY2x1c3Rlcih2b2lkKQogCWNoZWNrX25ld19j
bHVzdGVyX3JlcGxpY2F0aW9uX3Nsb3RzKCk7CiAKIAljaGVja19uZXdfY2x1c3Rlcl9zdWJzY3Jp
cHRpb25fY29uZmlndXJhdGlvbigpOworCisJY2hlY2tfdHJhY2tfY29tbWl0X3RpbWVzdGFtcF9w
YXJhbWV0ZXIoJm5ld19jbHVzdGVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Vw
Z3JhZGUvY29udHJvbGRhdGEuYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9jb250cm9sZGF0YS5jCmlu
ZGV4IDkwY2VmMDg2NGRlLi5iMjE4ZWQ5MjM4OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdy
YWRlL2NvbnRyb2xkYXRhLmMKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL2NvbnRyb2xkYXRhLmMK
QEAgLTIwOCw3ICsyMDgsMTEgQEAgZ2V0X2NvbnRyb2xfZGF0YShDbHVzdGVySW5mbyAqY2x1c3Rl
cikKIAkJY2x1c3Rlci0+Y29udHJvbGRhdGEuZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gMDsKIAkJ
Z290X2RhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IHRydWU7CiAJfQotCisJaWYgKEdFVF9NQUpPUl9W
RVJTSU9OKGNsdXN0ZXItPm1ham9yX3ZlcnNpb24pIDwgOTA1KQorCXsKKwkJY2x1c3Rlci0+Y29u
dHJvbGRhdGEuY2hrcG50X29sZHN0Q29tbWl0VHN4aWQgPSAwOworCQljbHVzdGVyLT5jb250cm9s
ZGF0YS5jaGtwbnRfbmV3c3RDb21taXRUc3hpZCA9IDA7CisJfQogCS8qIHdlIGhhdmUgdGhlIHJl
c3VsdCBvZiBjbWQgaW4gIm91dHB1dCIuIHNvIHBhcnNlIGl0IGxpbmUgYnkgbGluZSBub3cgKi8K
IAl3aGlsZSAoZmdldHMoYnVmaW4sIHNpemVvZihidWZpbiksIG91dHB1dCkpCiAJewpAQCAtMzIx
LDYgKzMyNSwyNiBAQCBnZXRfY29udHJvbF9kYXRhKENsdXN0ZXJJbmZvICpjbHVzdGVyKQogCQkJ
Y2x1c3Rlci0+Y29udHJvbGRhdGEuY2hrcG50X254dG11bHRpID0gc3RyMnVpbnQocCk7CiAJCQln
b3RfbXVsdGkgPSB0cnVlOwogCQl9CisJCWVsc2UgaWYgKChwID0gc3Ryc3RyKGJ1ZmluLCAiTGF0
ZXN0IGNoZWNrcG9pbnQncyBvbGRlc3RDb21taXRUc1hpZDoiKSkgIT0gTlVMTCkKKwkJeworCQkJ
cCA9IHN0cmNocihwLCAnOicpOworCisJCQlpZiAocCA9PSBOVUxMIHx8IHN0cmxlbihwKSA8PSAx
KQorCQkJCXBnX2ZhdGFsKCIlZDogY29udHJvbGRhdGEgcmV0cmlldmFsIHByb2JsZW0iLCBfX0xJ
TkVfXyk7CisKKwkJCXArKzsJCQkJLyogcmVtb3ZlICc6JyBjaGFyICovCisJCQljbHVzdGVyLT5j
b250cm9sZGF0YS5jaGtwbnRfb2xkc3RDb21taXRUc3hpZCA9IHN0cjJ1aW50KHApOworCQl9CisJ
CWVsc2UgaWYgKChwID0gc3Ryc3RyKGJ1ZmluLCAiTGF0ZXN0IGNoZWNrcG9pbnQncyBuZXdlc3RD
b21taXRUc1hpZDoiKSkgIT0gTlVMTCkKKwkJeworCQkJcCA9IHN0cmNocihwLCAnOicpOworCisJ
CQlpZiAocCA9PSBOVUxMIHx8IHN0cmxlbihwKSA8PSAxKQorCQkJCXBnX2ZhdGFsKCIlZDogY29u
dHJvbGRhdGEgcmV0cmlldmFsIHByb2JsZW0iLCBfX0xJTkVfXyk7CisKKwkJCXArKzsJCQkJLyog
cmVtb3ZlICc6JyBjaGFyICovCisJCQljbHVzdGVyLT5jb250cm9sZGF0YS5jaGtwbnRfbmV3c3RD
b21taXRUc3hpZCA9IHN0cjJ1aW50KHApOworCQl9CiAJCWVsc2UgaWYgKChwID0gc3Ryc3RyKGJ1
ZmluLCAiTGF0ZXN0IGNoZWNrcG9pbnQncyBvbGRlc3RYSUQ6IikpICE9IE5VTEwpCiAJCXsKIAkJ
CXAgPSBzdHJjaHIocCwgJzonKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9pbmZv
LmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvaW5mby5jCmluZGV4IDdjZTA4MjcwMTY4Li4yNDI4YzUy
ZDBlOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL2luZm8uYworKysgYi9zcmMvYmlu
L3BnX3VwZ3JhZGUvaW5mby5jCkBAIC04MTksNiArODE5LDI3IEBAIGdldF9zdWJzY3JpcHRpb25f
aW5mbyhDbHVzdGVySW5mbyAqY2x1c3RlcikKIAlQUWZpbmlzaChjb25uKTsKIH0KIAorLyoKKyAq
IGNoZWNrX3RyYWNrX2NvbW1pdF90aW1lc3RhbXBfcGFyYW1ldGVyKENsdXN0ZXJJbmZvICpjbHVz
dGVyKQorICoKKyAqIEdldHMgdHJhY2tfY29tbWl0X3RpbWVzdGFtcCBwYXJhbWV0ZXIgaW4gdGhl
IGNsdXN0ZXIuCisgKi8KK3ZvaWQKK2NoZWNrX3RyYWNrX2NvbW1pdF90aW1lc3RhbXBfcGFyYW1l
dGVyKENsdXN0ZXJJbmZvICpjbHVzdGVyKQoreworCVBHY29ubgkgICAqY29ubjsKKwlQR3Jlc3Vs
dCAgICpyZXM7CisJaW50CQkJaXNfc2V0OworCisJY29ubiA9IGNvbm5lY3RUb1NlcnZlcihjbHVz
dGVyLCAidGVtcGxhdGUxIik7CisJcmVzID0gZXhlY3V0ZVF1ZXJ5T3JEaWUoY29ubiwgIlNFTEVD
VCBjb3VudCgqKSBBUyBpc19zZXQgIgorCQkJCQkJCSJGUk9NIHBnX3NldHRpbmdzIFdIRVJFIG5h
bWUgPSAndHJhY2tfY29tbWl0X3RpbWVzdGFtcCcgYW5kIHNldHRpbmcgPSAnb24nIik7CisJaXNf
c2V0ID0gUFFmbnVtYmVyKHJlcywgImlzX3NldCIpOworCWNsdXN0ZXItPnRyYWNrX2NvbW1pdF90
aW1lc3RhbXBfb24gPSBhdG9pKFBRZ2V0dmFsdWUocmVzLCAwLCBpc19zZXQpKSA9PSAxOworCisJ
UFFjbGVhcihyZXMpOworCVBRZmluaXNoKGNvbm4pOworfQogc3RhdGljIHZvaWQKIGZyZWVfZGJf
YW5kX3JlbF9pbmZvcyhEYkluZm9BcnIgKmRiX2FycikKIHsKZGlmZiAtLWdpdCBhL3NyYy9iaW4v
cGdfdXBncmFkZS9wZ191cGdyYWRlLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5j
CmluZGV4IDQ5MGU5OGZhMjZmLi5kYzkxZGE3OGQ5YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191
cGdyYWRlL3BnX3VwZ3JhZGUuYworKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5j
CkBAIC03NzIsNiArNzcyLDggQEAgY29weV9zdWJkaXJfZmlsZXMoY29uc3QgY2hhciAqb2xkX3N1
YmRpciwgY29uc3QgY2hhciAqbmV3X3N1YmRpcikKIHN0YXRpYyB2b2lkCiBjb3B5X3hhY3RfeGxv
Z194aWQodm9pZCkKIHsKKwlib29sCQlpc19jb3B5X2NvbW1pdF90czsKKwogCS8qCiAJICogQ29w
eSBvbGQgY29tbWl0IGxvZ3MgdG8gbmV3IGRhdGEgZGlyLiBwZ19jbG9nIGhhcyBiZWVuIHJlbmFt
ZWQgdG8KIAkgKiBwZ194YWN0IGluIHBvc3QtMTAgY2x1c3RlcnMuCkBAIC03ODEsNiArNzgzLDE2
IEBAIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKQogCQkJCQkgIEdFVF9NQUpPUl9WRVJTSU9OKG5l
d19jbHVzdGVyLm1ham9yX3ZlcnNpb24pIDw9IDkwNiA/CiAJCQkJCSAgInBnX2Nsb2ciIDogInBn
X3hhY3QiKTsKIAorCS8qCisJICogQ29weSBwZ19jb21taXRfdHMgb25seSBpZiB0aHJlZSBjb25k
aXRpb25zIGFyZSBtZXQKKwkgKi8KKwlpc19jb3B5X2NvbW1pdF90cyA9IG9sZF9jbHVzdGVyLmNv
bnRyb2xkYXRhLmNoa3BudF9vbGRzdENvbW1pdFRzeGlkID4gMAorCQkmJiBvbGRfY2x1c3Rlci5j
b250cm9sZGF0YS5jaGtwbnRfbmV3c3RDb21taXRUc3hpZCA+IDAKKwkJJiYgbmV3X2NsdXN0ZXIu
dHJhY2tfY29tbWl0X3RpbWVzdGFtcF9vbjsKKworCWlmIChpc19jb3B5X2NvbW1pdF90cykKKwkJ
Y29weV9zdWJkaXJfZmlsZXMoInBnX2NvbW1pdF90cyIsICJwZ19jb21taXRfdHMiKTsKKwogCXBy
ZXBfc3RhdHVzKCJTZXR0aW5nIG9sZGVzdCBYSUQgZm9yIG5ldyBjbHVzdGVyIik7CiAJZXhlY19w
cm9nKFVUSUxJVFlfTE9HX0ZJTEUsIE5VTEwsIHRydWUsIHRydWUsCiAJCQkgICJcIiVzL3BnX3Jl
c2V0d2FsXCIgLWYgLXUgJXUgXCIlc1wiIiwKQEAgLTc5OCwxMiArODEwLDE1IEBAIGNvcHlfeGFj
dF94bG9nX3hpZCh2b2lkKQogCQkJICAiXCIlcy9wZ19yZXNldHdhbFwiIC1mIC1lICV1IFwiJXNc
IiIsCiAJCQkgIG5ld19jbHVzdGVyLmJpbmRpciwgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hr
cG50X254dGVwb2NoLAogCQkJICBuZXdfY2x1c3Rlci5wZ2RhdGEpOwotCS8qIG11c3QgcmVzZXQg
Y29tbWl0IHRpbWVzdGFtcCBsaW1pdHMgYWxzbyAqLworCisJLyoKKwkgKiBtdXN0IHJlc2V0IGNv
bW1pdCB0aW1lc3RhbXAgbGltaXRzIGFsc28gb3IgY29weSBmcm9tIHRoZSBvbGQgY2x1c3Rlcgor
CSAqLwogCWV4ZWNfcHJvZyhVVElMSVRZX0xPR19GSUxFLCBOVUxMLCB0cnVlLCB0cnVlLAogCQkJ
ICAiXCIlcy9wZ19yZXNldHdhbFwiIC1mIC1jICV1LCV1IFwiJXNcIiIsCiAJCQkgIG5ld19jbHVz
dGVyLmJpbmRpciwKLQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dHhpZCwK
LQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dHhpZCwKKwkJCSAgaXNfY29w
eV9jb21taXRfdHMgPyBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfb2xkc3RDb21taXRU
c3hpZCA6IG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHR4aWQsCisJCQkgIGlzX2Nv
cHlfY29tbWl0X3RzID8gb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X25ld3N0Q29tbWl0
VHN4aWQgOiBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0eGlkLAogCQkJICBuZXdf
Y2x1c3Rlci5wZ2RhdGEpOwogCWNoZWNrX29rKCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf
dXBncmFkZS9wZ191cGdyYWRlLmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCmlu
ZGV4IDBlZjQ3YmUwZGMxLi40YmJmZGZhODgxZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdy
YWRlL3BnX3VwZ3JhZGUuaAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCkBA
IC0yMzgsNiArMjM4LDggQEAgdHlwZWRlZiBzdHJ1Y3QKIAl1aW50MzIJCWNoa3BudF9ueHRteG9m
ZjsKIAl1aW50MzIJCWNoa3BudF9vbGRzdE11bHRpOwogCXVpbnQzMgkJY2hrcG50X29sZHN0eGlk
OworCXVpbnQzMgkJY2hrcG50X29sZHN0Q29tbWl0VHN4aWQ7CisJdWludDMyCQljaGtwbnRfbmV3
c3RDb21taXRUc3hpZDsKIAl1aW50MzIJCWFsaWduOwogCXVpbnQzMgkJYmxvY2tzejsKIAl1aW50
MzIJCWxhcmdlc3o7CkBAIC0zMDYsNiArMzA4LDggQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQJCQlu
c3ViczsJCQkvKiBudW1iZXIgb2Ygc3Vic2NyaXB0aW9ucyAqLwogCWJvb2wJCXN1Yl9yZXRhaW5f
ZGVhZF90dXBsZXM7IC8qIHdoZXRoZXIgYSBzdWJzY3JpcHRpb24gZW5hYmxlcwogCQkJCQkJCQkJ
CSAqIHJldGFpbl9kZWFkX3R1cGxlcy4gKi8KKwlib29sCQl0cmFja19jb21taXRfdGltZXN0YW1w
X29uOwkvKiB0cmFja19jb21taXRfdGltZXN0YW1wIGZvcgorCQkJCQkJCQkJCSAqIG5ldyBjbHVz
dGVyICovCiB9IENsdXN0ZXJJbmZvOwogCiAKQEAgLTQ0NCw2ICs0NDgsNyBAQCBGaWxlTmFtZU1h
cCAqZ2VuX2RiX2ZpbGVfbWFwcyhEYkluZm8gKm9sZF9kYiwKIHZvaWQJCWdldF9kYl9yZWxfYW5k
X3Nsb3RfaW5mb3MoQ2x1c3RlckluZm8gKmNsdXN0ZXIpOwogaW50CQkJY291bnRfb2xkX2NsdXN0
ZXJfbG9naWNhbF9zbG90cyh2b2lkKTsKIHZvaWQJCWdldF9zdWJzY3JpcHRpb25faW5mbyhDbHVz
dGVySW5mbyAqY2x1c3Rlcik7Cit2b2lkCQljaGVja190cmFja19jb21taXRfdGltZXN0YW1wX3Bh
cmFtZXRlcihDbHVzdGVySW5mbyAqY2x1c3Rlcik7CiAKIC8qIG9wdGlvbi5jICovCiAKZGlmZiAt
LWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS90LzAwN190cmFuc2Zlcl9jb21taXRfdHMucGwgYi9z
cmMvYmluL3BnX3VwZ3JhZGUvdC8wMDdfdHJhbnNmZXJfY29tbWl0X3RzLnBsCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZTc3MTg5YmFmYwotLS0gL2Rldi9udWxsCisr
KyBiL3NyYy9iaW4vcGdfdXBncmFkZS90LzAwN190cmFuc2Zlcl9jb21taXRfdHMucGwKQEAgLTAs
MCArMSwxMjkgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl
bG9wbWVudCBHcm91cAorCisjIFRlc3RzIGZvciB0cmFuc2ZlciBwZ19jb21taXRfdHMgZGlyZWN0
b3J5LgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2Ug
UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsK
K3VzZSBUZXN0OjpNb3JlOworCitzdWIgY29tbWFuZF9vdXRwdXQKK3sKKwlteSAoJGNtZCkgPSBA
XzsKKwlteSAoJHN0ZG91dCwgJHN0ZGVycik7CisKKwlwcmludCgiIyBSdW5uaW5nOiAiIC4gam9p
bigiICIsIEB7JGNtZH0pIC4gIlxuIik7CisKKwlteSAkcmVzdWx0ID0gSVBDOjpSdW46OnJ1biAk
Y21kLCAnPicsIFwkc3Rkb3V0LCAnMj4nLCBcJHN0ZGVycjsKKwlvaygkcmVzdWx0LCAiQCRjbWQg
ZXhpdCBjb2RlIDAiKTsKKwlpcygkc3RkZXJyLCAnJywgIkAkY21kIG5vIHN0ZGVyciIpOworCisJ
cmV0dXJuICRzdGRvdXQ7Cit9CisKKyMgQ2FuIGJlIGNoYW5nZWQgdG8gdGVzdCB0aGUgb3RoZXIg
bW9kZXMKK215ICRtb2RlID0gJEVOVntQR19URVNUX1BHX1VQR1JBREVfTU9ERX0gfHwgJy0tY29w
eSc7CisKKyMgSW5pdGlhbGl6ZSBvbGQgY2x1c3RlcgorbXkgJG9sZCA9IFBvc3RncmVTUUw6OlRl
c3Q6OkNsdXN0ZXItPm5ldygnb2xkJyk7Ciskb2xkLT5pbml0OworJG9sZC0+YXBwZW5kX2NvbmYo
J3Bvc3RncmVzcWwuY29uZicsICd0cmFja19jb21taXRfdGltZXN0YW1wID0gb24nKTsKKyRvbGQt
PnN0YXJ0OworJG9sZC0+Y29tbWFuZF9vayhbICdwZ2JlbmNoJywgJy1pJywgJy1zJywgJzEnIF0s
ICdpbml0IHBnYmVuY2gnKTsKKyRvbGQtPmNvbW1hbmRfb2soWyAncGdiZW5jaCcsICctdCcsICcx
MDAnLCAnLWonLCAnMicgXSwgJ3BnYmVuY2ggaXQnKTsKKyRvbGQtPnN0b3A7CisKKyMgSW5pdGlh
bGl6ZSBuZXcgY2x1c3RlcgorbXkgJG5ldyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l
dygnbmV3Jyk7CiskbmV3LT5pbml0OworJG5ldy0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u
ZicsICd0cmFja19jb21taXRfdGltZXN0YW1wID0gb24nKTsKKworY29tbWFuZF9vaygKKwlbCisJ
CSdwZ191cGdyYWRlJywgJy0tbm8tc3luYycsCisJCSctZCcsICRvbGQtPmRhdGFfZGlyLAorCQkn
LUQnLCAkbmV3LT5kYXRhX2RpciwKKwkJJy1iJywgJG9sZC0+Y29uZmlnX2RhdGEoJy0tYmluZGly
JyksCisJCSctQicsICRuZXctPmNvbmZpZ19kYXRhKCctLWJpbmRpcicpLAorCQknLXMnLCAkbmV3
LT5ob3N0LAorCQknLXAnLCAkb2xkLT5wb3J0LAorCQknLVAnLCAkbmV3LT5wb3J0LAorCQkkbW9k
ZQorCV0sCisJJ3J1biBvZiBwZ191cGdyYWRlJyk7CisKKyRuZXctPnN0YXJ0OworJG5ldy0+Y29t
bWFuZF9vayhbICdwZ2JlbmNoJywgJy10JywgJzEwJyBdLCAncGdiZW5jaCBpdCcpOworJG5ldy0+
c3RvcDsKKworc3ViIHhhY3RfY29tbWl0X3RzCit7CisJbXkgKCRub2RlKSA9IEBfOworCW15ICgk
b2xkZXN0LCAkbmV3ZXN0KTsKKwlteSAkb3V0ID0gY29tbWFuZF9vdXRwdXQoWyAncGdfY29udHJv
bGRhdGEnLCAnLUQnLCAkbm9kZS0+ZGF0YV9kaXIgXSk7CisKKwlpZiAoJG91dCA9fiAvb2xkZXN0
Q29tbWl0VHNYaWQ6KFxkKykvKSB7CisJCSRvbGRlc3QgPSAkMTsKKwl9CisJaWYgKCRvdXQgPX4g
L25ld2VzdENvbW1pdFRzWGlkOihcZCspLykgeworCQkkbmV3ZXN0PSAkMTsKKwl9CisKKwlmb3Ig
bXkgJGxpbmUgKGdyZXAgeyAvXFMvIH0gc3BsaXQgL1xuLywgJG91dCkgeworCQlpZiAoJGxpbmUg
PX4gL0xhdGVzdCBjaGVja3BvaW50J3MgTmV4dFhJRDovKSB7CisJCQlwcmludCAkbGluZSAuICJc
biI7CisJCX0KKwkJaWYgKCRsaW5lID1+IC9MYXRlc3QgY2hlY2twb2ludCdzIG9sZGVzdFhJRDov
KSB7CisJCQlwcmludCAkbGluZSAuICJcbiI7CisJCX0KKwkJaWYgKCRsaW5lID1+IC9MYXRlc3Qg
Y2hlY2twb2ludCdzIG9sZGVzdENvbW1pdFRzWGlkLykgeworCQkJcHJpbnQgJGxpbmUgLiAiXG4i
OworCQl9CisJCWlmICgkbGluZSA9fiAvTGF0ZXN0IGNoZWNrcG9pbnQncyBuZXdlc3RDb21taXRU
c1hpZDovKSB7CisJCQlwcmludCAkbGluZSAuICJcbiI7CisJCX0KKwl9CisKKwkkbm9kZS0+c3Rh
cnQ7CisJbXkgJHJlcyA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIgorCVdJVEggeGlk
cyBBUyAoCisJCVNFTEVDVCB2Ojp0ZXh0Ojp4aWQgQVMgeAorCQlGUk9NIGdlbmVyYXRlX3Nlcmll
cygkb2xkZXN0LCAkbmV3ZXN0KSB2CisJKQorCVNFTEVDVCB4LCBwZ194YWN0X2NvbW1pdF90aW1l
c3RhbXAoeDo6dGV4dDo6eGlkKQorCUZST00geGlkczsKKwkiKTsKKwkkbm9kZS0+c3RvcDsKKwly
ZXR1cm4gZ3JlcCB7IC9cUy8gfSBzcGxpdCAvXG4vLCAkcmVzOworfQorCitteSBAYSA9IHhhY3Rf
Y29tbWl0X3RzKCRvbGQpOworbXkgQGIgPSB4YWN0X2NvbW1pdF90cygkbmV3KTsKK215ICVoMSA9
IG1hcCB7ICRfID0+IDEgfSBAYTsKK215ICVoMiA9IG1hcCB7ICRfID0+IDEgfSBAYjsKKworIwor
IyBBbGwgdGltZXN0YW1wcyBmcm9tIHRoZSBvbGQgY2x1c3RlciBzaG91bGQgYXBwZWFyIGluIHRo
ZSBuZXcgb25lLgorIworbXkgJGNvdW50ID0gMDsKK3ByaW50ICJDb21taXQgdGltZXN0YW1wIG9u
bHkgaW4gb2xkIGNsdXN0ZXI6XG4iOworZm9yIG15ICRsaW5lIChAYSkgeworCXVubGVzcyAoJGgy
eyRsaW5lfSkgeworCQlwcmludCAiJGxpbmVcbiI7CisJCSRjb3VudCA9ICRjb3VudCArIDE7CisJ
fQorfQorb2soJGNvdW50ID09IDAsICJhbGwgdGhlIHRpbWVzdGFtcCB0cmFuc2ZlcnJlZCBzdWNj
ZXNzZnVsbHkiKTsKKworIworIyBUaGUgbmV3IGNsdXN0ZXIgc2hvdWxkIGNvbnRhaW4gdGltZXN0
YW1wcyBjcmVhdGVkIGR1cmluZyB0aGUgcGdfdXBncmFkZSBhbmQKKyMgc29tZSBtb3JlIGNyZWF0
ZWQgYnkgdGhlIHBnYmVuY2guCisjCitwcmludCAiXG5Db21taXQgdGltZXN0YW1wIG9ubHkgaW4g
bmV3IGNsdXN0ZXI6XG4iOworZm9yIG15ICRsaW5lIChAYikgeworCXByaW50ICIkbGluZVxuIiB1
bmxlc3MgJGgxeyRsaW5lfTsKK30KKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQyLjIKCg==
------==--bound.172831.11ea6385-4c34-4862-b367-c3ba17df0f70--
Attachments:
[text/x-diff] v2-0001-Migration-of-the-pg_commit_ts-directory.patch (9.6K, ../../[email protected]/2-v2-0001-Migration-of-the-pg_commit_ts-directory.patch)
download | inline diff:
From 24a8a631313a236a745d48dd4bd5e40f413de7e0 Mon Sep 17 00:00:00 2001
From: Sergey Levin <[email protected]>
Date: Sat, 4 Oct 2025 20:22:46 +0500
Subject: [PATCH] Migration of the pg_commit_ts directory
---
src/bin/pg_upgrade/check.c | 2 +
src/bin/pg_upgrade/controldata.c | 26 +++-
src/bin/pg_upgrade/info.c | 21 +++
src/bin/pg_upgrade/pg_upgrade.c | 21 ++-
src/bin/pg_upgrade/pg_upgrade.h | 5 +
.../pg_upgrade/t/007_transfer_commit_ts.pl | 129 ++++++++++++++++++
6 files changed, 200 insertions(+), 4 deletions(-)
create mode 100644 src/bin/pg_upgrade/t/007_transfer_commit_ts.pl
diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
index 1e17d64b3ec..b17603d11bb 100644
--- a/src/bin/pg_upgrade/check.c
+++ b/src/bin/pg_upgrade/check.c
@@ -767,6 +767,8 @@ check_new_cluster(void)
check_new_cluster_replication_slots();
check_new_cluster_subscription_configuration();
+
+ check_track_commit_timestamp_parameter(&new_cluster);
}
diff --git a/src/bin/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c
index 90cef0864de..b218ed92389 100644
--- a/src/bin/pg_upgrade/controldata.c
+++ b/src/bin/pg_upgrade/controldata.c
@@ -208,7 +208,11 @@ get_control_data(ClusterInfo *cluster)
cluster->controldata.data_checksum_version = 0;
got_data_checksum_version = true;
}
-
+ if (GET_MAJOR_VERSION(cluster->major_version) < 905)
+ {
+ cluster->controldata.chkpnt_oldstCommitTsxid = 0;
+ cluster->controldata.chkpnt_newstCommitTsxid = 0;
+ }
/* we have the result of cmd in "output". so parse it line by line now */
while (fgets(bufin, sizeof(bufin), output))
{
@@ -321,6 +325,26 @@ get_control_data(ClusterInfo *cluster)
cluster->controldata.chkpnt_nxtmulti = str2uint(p);
got_multi = true;
}
+ else if ((p = strstr(bufin, "Latest checkpoint's oldestCommitTsXid:")) != NULL)
+ {
+ p = strchr(p, ':');
+
+ if (p == NULL || strlen(p) <= 1)
+ pg_fatal("%d: controldata retrieval problem", __LINE__);
+
+ p++; /* remove ':' char */
+ cluster->controldata.chkpnt_oldstCommitTsxid = str2uint(p);
+ }
+ else if ((p = strstr(bufin, "Latest checkpoint's newestCommitTsXid:")) != NULL)
+ {
+ p = strchr(p, ':');
+
+ if (p == NULL || strlen(p) <= 1)
+ pg_fatal("%d: controldata retrieval problem", __LINE__);
+
+ p++; /* remove ':' char */
+ cluster->controldata.chkpnt_newstCommitTsxid = str2uint(p);
+ }
else if ((p = strstr(bufin, "Latest checkpoint's oldestXID:")) != NULL)
{
p = strchr(p, ':');
diff --git a/src/bin/pg_upgrade/info.c b/src/bin/pg_upgrade/info.c
index 7ce08270168..2428c52d0e9 100644
--- a/src/bin/pg_upgrade/info.c
+++ b/src/bin/pg_upgrade/info.c
@@ -819,6 +819,27 @@ get_subscription_info(ClusterInfo *cluster)
PQfinish(conn);
}
+/*
+ * check_track_commit_timestamp_parameter(ClusterInfo *cluster)
+ *
+ * Gets track_commit_timestamp parameter in the cluster.
+ */
+void
+check_track_commit_timestamp_parameter(ClusterInfo *cluster)
+{
+ PGconn *conn;
+ PGresult *res;
+ int is_set;
+
+ conn = connectToServer(cluster, "template1");
+ res = executeQueryOrDie(conn, "SELECT count(*) AS is_set "
+ "FROM pg_settings WHERE name = 'track_commit_timestamp' and setting = 'on'");
+ is_set = PQfnumber(res, "is_set");
+ cluster->track_commit_timestamp_on = atoi(PQgetvalue(res, 0, is_set)) == 1;
+
+ PQclear(res);
+ PQfinish(conn);
+}
static void
free_db_and_rel_infos(DbInfoArr *db_arr)
{
diff --git a/src/bin/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c
index 490e98fa26f..dc91da78d9b 100644
--- a/src/bin/pg_upgrade/pg_upgrade.c
+++ b/src/bin/pg_upgrade/pg_upgrade.c
@@ -772,6 +772,8 @@ copy_subdir_files(const char *old_subdir, const char *new_subdir)
static void
copy_xact_xlog_xid(void)
{
+ bool is_copy_commit_ts;
+
/*
* Copy old commit logs to new data dir. pg_clog has been renamed to
* pg_xact in post-10 clusters.
@@ -781,6 +783,16 @@ copy_xact_xlog_xid(void)
GET_MAJOR_VERSION(new_cluster.major_version) <= 906 ?
"pg_clog" : "pg_xact");
+ /*
+ * Copy pg_commit_ts only if three conditions are met
+ */
+ is_copy_commit_ts = old_cluster.controldata.chkpnt_oldstCommitTsxid > 0
+ && old_cluster.controldata.chkpnt_newstCommitTsxid > 0
+ && new_cluster.track_commit_timestamp_on;
+
+ if (is_copy_commit_ts)
+ copy_subdir_files("pg_commit_ts", "pg_commit_ts");
+
prep_status("Setting oldest XID for new cluster");
exec_prog(UTILITY_LOG_FILE, NULL, true, true,
"\"%s/pg_resetwal\" -f -u %u \"%s\"",
@@ -798,12 +810,15 @@ copy_xact_xlog_xid(void)
"\"%s/pg_resetwal\" -f -e %u \"%s\"",
new_cluster.bindir, old_cluster.controldata.chkpnt_nxtepoch,
new_cluster.pgdata);
- /* must reset commit timestamp limits also */
+
+ /*
+ * must reset commit timestamp limits also or copy from the old cluster
+ */
exec_prog(UTILITY_LOG_FILE, NULL, true, true,
"\"%s/pg_resetwal\" -f -c %u,%u \"%s\"",
new_cluster.bindir,
- old_cluster.controldata.chkpnt_nxtxid,
- old_cluster.controldata.chkpnt_nxtxid,
+ is_copy_commit_ts ? old_cluster.controldata.chkpnt_oldstCommitTsxid : old_cluster.controldata.chkpnt_nxtxid,
+ is_copy_commit_ts ? old_cluster.controldata.chkpnt_newstCommitTsxid : old_cluster.controldata.chkpnt_nxtxid,
new_cluster.pgdata);
check_ok();
diff --git a/src/bin/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h
index 0ef47be0dc1..4bbfdfa881e 100644
--- a/src/bin/pg_upgrade/pg_upgrade.h
+++ b/src/bin/pg_upgrade/pg_upgrade.h
@@ -238,6 +238,8 @@ typedef struct
uint32 chkpnt_nxtmxoff;
uint32 chkpnt_oldstMulti;
uint32 chkpnt_oldstxid;
+ uint32 chkpnt_oldstCommitTsxid;
+ uint32 chkpnt_newstCommitTsxid;
uint32 align;
uint32 blocksz;
uint32 largesz;
@@ -306,6 +308,8 @@ typedef struct
int nsubs; /* number of subscriptions */
bool sub_retain_dead_tuples; /* whether a subscription enables
* retain_dead_tuples. */
+ bool track_commit_timestamp_on; /* track_commit_timestamp for
+ * new cluster */
} ClusterInfo;
@@ -444,6 +448,7 @@ FileNameMap *gen_db_file_maps(DbInfo *old_db,
void get_db_rel_and_slot_infos(ClusterInfo *cluster);
int count_old_cluster_logical_slots(void);
void get_subscription_info(ClusterInfo *cluster);
+void check_track_commit_timestamp_parameter(ClusterInfo *cluster);
/* option.c */
diff --git a/src/bin/pg_upgrade/t/007_transfer_commit_ts.pl b/src/bin/pg_upgrade/t/007_transfer_commit_ts.pl
new file mode 100644
index 00000000000..7e77189bafc
--- /dev/null
+++ b/src/bin/pg_upgrade/t/007_transfer_commit_ts.pl
@@ -0,0 +1,129 @@
+# Copyright (c) 2025, PostgreSQL Global Development Group
+
+# Tests for transfer pg_commit_ts directory.
+
+use strict;
+use warnings FATAL => 'all';
+
+use PostgreSQL::Test::Cluster;
+use PostgreSQL::Test::Utils;
+use Test::More;
+
+sub command_output
+{
+ my ($cmd) = @_;
+ my ($stdout, $stderr);
+
+ print("# Running: " . join(" ", @{$cmd}) . "\n");
+
+ my $result = IPC::Run::run $cmd, '>', \$stdout, '2>', \$stderr;
+ ok($result, "@$cmd exit code 0");
+ is($stderr, '', "@$cmd no stderr");
+
+ return $stdout;
+}
+
+# Can be changed to test the other modes
+my $mode = $ENV{PG_TEST_PG_UPGRADE_MODE} || '--copy';
+
+# Initialize old cluster
+my $old = PostgreSQL::Test::Cluster->new('old');
+$old->init;
+$old->append_conf('postgresql.conf', 'track_commit_timestamp = on');
+$old->start;
+$old->command_ok([ 'pgbench', '-i', '-s', '1' ], 'init pgbench');
+$old->command_ok([ 'pgbench', '-t', '100', '-j', '2' ], 'pgbench it');
+$old->stop;
+
+# Initialize new cluster
+my $new = PostgreSQL::Test::Cluster->new('new');
+$new->init;
+$new->append_conf('postgresql.conf', 'track_commit_timestamp = on');
+
+command_ok(
+ [
+ 'pg_upgrade', '--no-sync',
+ '-d', $old->data_dir,
+ '-D', $new->data_dir,
+ '-b', $old->config_data('--bindir'),
+ '-B', $new->config_data('--bindir'),
+ '-s', $new->host,
+ '-p', $old->port,
+ '-P', $new->port,
+ $mode
+ ],
+ 'run of pg_upgrade');
+
+$new->start;
+$new->command_ok([ 'pgbench', '-t', '10' ], 'pgbench it');
+$new->stop;
+
+sub xact_commit_ts
+{
+ my ($node) = @_;
+ my ($oldest, $newest);
+ my $out = command_output([ 'pg_controldata', '-D', $node->data_dir ]);
+
+ if ($out =~ /oldestCommitTsXid:(\d+)/) {
+ $oldest = $1;
+ }
+ if ($out =~ /newestCommitTsXid:(\d+)/) {
+ $newest= $1;
+ }
+
+ for my $line (grep { /\S/ } split /\n/, $out) {
+ if ($line =~ /Latest checkpoint's NextXID:/) {
+ print $line . "\n";
+ }
+ if ($line =~ /Latest checkpoint's oldestXID:/) {
+ print $line . "\n";
+ }
+ if ($line =~ /Latest checkpoint's oldestCommitTsXid/) {
+ print $line . "\n";
+ }
+ if ($line =~ /Latest checkpoint's newestCommitTsXid:/) {
+ print $line . "\n";
+ }
+ }
+
+ $node->start;
+ my $res = $node->safe_psql('postgres', "
+ WITH xids AS (
+ SELECT v::text::xid AS x
+ FROM generate_series($oldest, $newest) v
+ )
+ SELECT x, pg_xact_commit_timestamp(x::text::xid)
+ FROM xids;
+ ");
+ $node->stop;
+ return grep { /\S/ } split /\n/, $res;
+}
+
+my @a = xact_commit_ts($old);
+my @b = xact_commit_ts($new);
+my %h1 = map { $_ => 1 } @a;
+my %h2 = map { $_ => 1 } @b;
+
+#
+# All timestamps from the old cluster should appear in the new one.
+#
+my $count = 0;
+print "Commit timestamp only in old cluster:\n";
+for my $line (@a) {
+ unless ($h2{$line}) {
+ print "$line\n";
+ $count = $count + 1;
+ }
+}
+ok($count == 0, "all the timestamp transferred successfully");
+
+#
+# The new cluster should contain timestamps created during the pg_upgrade and
+# some more created by the pgbench.
+#
+print "\nCommit timestamp only in new cluster:\n";
+for my $line (@b) {
+ print "$line\n" unless $h1{$line};
+}
+
+done_testing();
--
2.42.2
^ permalink raw reply [nested|flat] 5+ messages in thread
* RE: Patch for migration of the pg_commit_ts directory v2
@ 2025-10-06 09:21 Hayato Kuroda (Fujitsu) <[email protected]>
parent: ls7777 <[email protected]>
0 siblings, 0 replies; 5+ messages in thread
From: Hayato Kuroda (Fujitsu) @ 2025-10-06 09:21 UTC (permalink / raw)
To: 'ls7777' <[email protected]>; +Cc: pgsql-hackers; [email protected] <[email protected]>; [email protected] <[email protected]>
Hi,
Could you please reply to the original thread? Otherwise, it is difficult to track later.
Regarding the patch, I think Amit suggested to raise an ERROR in case of parameter
mismatch, and Maxim agreed the point [2]. How do you feel?
[1]: https://www.postgresql.org/message-id/CAA4eK1%2BZayox%3Dx84upet_gc4hrCKSwZSpnO9%3DQ4vH8rrJbsBOg%40ma...
[2]: https://www.postgresql.org/message-id/CACG%3DezaFdL4EM8bdrHTRVHt5BmxxWGXcPiDr6Qm00Qj%2BS_Y%2BvQ%40ma...
Best regards,
Hayato Kuroda
FUJITSU LIMITED
^ permalink raw reply [nested|flat] 5+ messages in thread
* RE: Patch for migration of the pg_commit_ts directory
@ 2026-05-27 05:24 Hayato Kuroda (Fujitsu) <[email protected]>
0 siblings, 1 reply; 5+ messages in thread
From: Hayato Kuroda (Fujitsu) @ 2026-05-27 05:24 UTC (permalink / raw)
To: 'ls7777' <[email protected]>; +Cc: pgsql-hackers; [email protected] <[email protected]>; [email protected] <[email protected]>; Masahiko Sawada <[email protected]>
Dear Sergey,
While considering the feature once again, I came up with another issue.
When pg_upgrade migrates objects to a new instance, it normally checks whether
the new instance does not have existing objects. E.g., check_new_cluster_is_empty()
checks if no tables exist, and check_new_cluster_replication_slots() ensures
there are no logical slots.
Based on that, how should we handle the commit timestamp? Since the patch simply
copies the pg_commit_ts subdir, existing entries in the new cluster will be overwritten.
So we may have to check if the commit_ts entries are empty when the pg_upgrade
command runs, but not sure how to do that.
Best regards,
Hayato Kuroda
FUJITSU LIMITED
^ permalink raw reply [nested|flat] 5+ messages in thread
* Re: Patch for migration of the pg_commit_ts directory
@ 2026-05-29 16:08 ls7777 <[email protected]>
parent: Hayato Kuroda (Fujitsu) <[email protected]>
0 siblings, 1 reply; 5+ messages in thread
From: ls7777 @ 2026-05-29 16:08 UTC (permalink / raw)
To: Hayato Kuroda (Fujitsu) <[email protected]>; +Cc: pgsql-hackers; [email protected] <[email protected]>; [email protected] <[email protected]>; Masahiko Sawada <[email protected]>
<div>Hi,</div><div> </div><div><div>During copying, the copy_subdir_files function cleans up the target directory with the remove_new_subdir(new_subdir, true) function.</div><div> </div></div><div><br /></div><div><br /></div><div>----------------</div>
<div>Кому: 'ls7777' ([email protected]);<br /></div>
<div>Копия: [email protected], [email protected], [email protected], Masahiko Sawada ([email protected]);<br /></div>
<div>Тема: Patch for migration of the pg_commit_ts directory;<br /></div>
<div>27.05.2026, 10:25, "Hayato Kuroda (Fujitsu)" <[email protected]>:<br /></div>
<blockquote><p>Dear Sergey,<br /><br />While considering the feature once again, I came up with another issue.<br /><br />When pg_upgrade migrates objects to a new instance, it normally checks whether<br />the new instance does not have existing objects. E.g., check_new_cluster_is_empty()<br />checks if no tables exist, and check_new_cluster_replication_slots() ensures<br />there are no logical slots.<br /><br />Based on that, how should we handle the commit timestamp? Since the patch simply<br />copies the pg_commit_ts subdir, existing entries in the new cluster will be overwritten.<br />So we may have to check if the commit_ts entries are empty when the pg_upgrade<br />command runs, but not sure how to do that.<br /><br />Best regards,<br />Hayato Kuroda<br />FUJITSU LIMITED<br /> <br /></p></blockquote>
^ permalink raw reply [nested|flat] 5+ messages in thread
* RE: Patch for migration of the pg_commit_ts directory
@ 2026-06-01 01:25 Hayato Kuroda (Fujitsu) <[email protected]>
parent: ls7777 <[email protected]>
0 siblings, 0 replies; 5+ messages in thread
From: Hayato Kuroda (Fujitsu) @ 2026-06-01 01:25 UTC (permalink / raw)
To: 'ls7777' <[email protected]>; +Cc: pgsql-hackers; [email protected] <[email protected]>; [email protected] <[email protected]>; Masahiko Sawada <[email protected]>
Dear Sergey,
> During copying, the copy_subdir_files function cleans up the target
> directory with the remove_new_subdir(new_subdir, true) function.
Correct, the function can discard existing directory. But my point was that how
do we ENSURE it's OK to remove.
Best regards,
Hayato Kuroda
FUJITSU LIMITED
^ permalink raw reply [nested|flat] 5+ messages in thread
end of thread, other threads:[~2026-06-01 01:25 UTC | newest]
Thread overview: 5+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2025-10-04 16:08 Patch for migration of the pg_commit_ts directory v2 ls7777 <[email protected]>
2025-10-06 09:21 ` Hayato Kuroda (Fujitsu) <[email protected]>
2026-05-27 05:24 RE: Patch for migration of the pg_commit_ts directory Hayato Kuroda (Fujitsu) <[email protected]>
2026-05-29 16:08 ` Re: Patch for migration of the pg_commit_ts directory ls7777 <[email protected]>
2026-06-01 01:25 ` RE: Patch for migration of the pg_commit_ts directory Hayato Kuroda (Fujitsu) <[email protected]>
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox