public inbox for [email protected]  
help / color / mirror / Atom feed
Patch 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)" &lt;[email protected]&gt;:<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