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 1tnqAw-002eJ8-6g for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Feb 2025 02:32:31 +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 1tnqAw-00BVP3-6n for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Feb 2025 02:32:28 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tnqAv-00BVLR-Lh for pgsql-hackers@lists.postgresql.org; Fri, 28 Feb 2025 02:32:28 +0000 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tnqAq-0005nS-0K for pgsql-hackers@lists.postgresql.org; Fri, 28 Feb 2025 02:32:27 +0000 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-2fbffe0254fso3394192a91.3 for ; Thu, 27 Feb 2025 18:32:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1740709943; x=1741314743; darn=lists.postgresql.org; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=AShmQAnc1E1EAgtxO01bN07t9Xx6bqKEb62D0sxdc/E=; b=3XIsuViJUPsKD1iZbhLL0lswnEeF80p9JGiD75HKfndHSJH0IP171h2G4KZtoKegYW 1DADpWE3VORtXvieam7JR2JG/9EPZYRMWy+bXZpS96SVLCSzS+dIneFUQUFI101o2z++ XXDcXdAAfJSDXyE/qzFixlWydydc+UOUDY7RYi2OXpUU3Ak8ft1GI/HBuHA4rKuF/orm 8Kari0T4Kfi9RODfmfdGNavAYAX2y/pwgUgwlD4T9AmpKYWKb5YhS64ZMk+wRdtpOcJV ZIA2GjVkRI0UcUb6RRlpErwmEbrTFFn7a493K3bYXbm7CuNb8HRLyv43PiY1HcuhDBKf C8pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740709943; x=1741314743; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=AShmQAnc1E1EAgtxO01bN07t9Xx6bqKEb62D0sxdc/E=; b=a1iN1fberBVkTtdQJlW8X03Bw8zATyaIH9AO0kOWpd1f8LhFQNf3nsji+Y+eF+vpss ROS8XGCWkJnCB8kx4SqYx5ty/R3AeTg79HIV30XvJccIIxgAgLnhghTq7wh+zFzk2nOv 42doc9eMugYppUjbHZby32EA4fIcTMsp4xTY9qVzruXKanPf/1DCmK91NtJl4JM8+Mah 8z8OZc+Fub+NOzHqPshPDx7GB8HlybpEEDdU4+ZfFwLLe37kZxiC9CXk3fWqPZrcblv+ xofx/ibR6ccT6Crbm0Lj3LkugMKVldZNTjlmUDJRgUBxo7332NO55eVJ7RHqGnh2l87o ZBAw== X-Forwarded-Encrypted: i=1; AJvYcCUzEiiRZEdMhN1vGxr9nfHHbThujxCd5dWj14Sxr2np9W48WponjlCeLotNcfHw6Hk5LJOriTP0rJwzwbkX@lists.postgresql.org X-Gm-Message-State: AOJu0YyzRiTyUe3CW7b3RXWUuIRIMvyE9OkhRx8SHIezrMwigYeMqXj+ uDsAar5xaAYgQXi4iLp+9gSnAo48X1+UWI4IhP1WSAzU1umRJWre5DiGbSbvhg== X-Gm-Gg: ASbGncsmPyBzCy/wfF8Xp9eaKY0JYRExyq6YXW9sXLNZRg6Eq5NT73Gz/HzTOrHGSph tU/YjtlrANMN/cDYNLZL+0iGe7cQ7q3m94ZqJ8ChoCHvrOdwOud1Zc6VWD+zZUI41jVH9yCImkh NiXHP5jtnPvkbXB9Lytf5Y4JJXan9EugeyuNmPBFfVUt2YmV1tpfKsPSBf2l2TunRcRX4j6jY33 b5pJdvAV3BwHn4+ZYjNL0HNwAyriogIJawVJMympQKylQrcJU9yECgzOWkslhGJ7KanoWFzPoEG pvw+Y2u3tcXLfQrvZ+Vqo/+IK2Xo5ZJJ75eOvRVyLn+legAJOjBu/viAcT1V2dlo503q X-Google-Smtp-Source: AGHT+IEbjl89nigQLyYIk02zVYSMeaszN+aknnt3DwmEHnb7V0GxoPqtY124+gzL0k1MyRiazk2AmA== X-Received: by 2002:a17:90b:48cc:b0:2fe:9e50:42af with SMTP id 98e67ed59e1d1-2febabdc244mr2990667a91.24.1740709943247; Thu, 27 Feb 2025 18:32:23 -0800 (PST) Received: from jeff-laptop.lan (c-76-102-242-158.hsd1.ca.comcast.net. [76.102.242.158]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-223504c5dcesm22813625ad.119.2025.02.27.18.32.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Feb 2025 18:32:22 -0800 (PST) Message-ID: <768b2a237e892bf1334bdcbb066cdc1bd1368cb2.camel@j-davis.com> Subject: Re: Statistics Import and Export From: Jeff Davis To: Ashutosh Bapat , Corey Huinker Cc: Andres Freund , Tom Lane , Michael Paquier , Nathan Bossart , Bruce Momjian , Matthias van de Meent , Magnus Hagander , Stephen Frost , Peter Smith , PostgreSQL Hackers , alvherre@alvh.no-ip.org, jian he Date: Thu, 27 Feb 2025 18:32:20 -0800 In-Reply-To: References: <97b451228227c555be1a4f79c4a62ddec9a74f06.camel@j-davis.com> <1457469.1740419458@sss.pgh.pa.us> <8d13e4296408c53a93390525d0bcb906cbd13df4.camel@j-davis.com> Content-Type: multipart/mixed; boundary="=-Q0F+4LC/PGyd4BEWXhJ0" User-Agent: Evolution 3.44.4-0ubuntu2 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-Q0F+4LC/PGyd4BEWXhJ0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 2025-02-25 at 11:11 +0530, Ashutosh Bapat wrote: > So the dumped statistics are not restored exactly. The reason for > this > is the table statistics is dumped before dumping ALTER TABLE ... ADD > CONSTRAINT command which changes the statistics. I think all the > pg_restore_relation_stats() calls should be dumped after all the > schema and data modifications have been done. OR what's the point in > dumping statistics only to get rewritten even before restore > finishes. In your example, it's not so bad because the stats are actually better: the index is built after the data is present, and therefore relpages and reltuples are correct. The problem is more clear if you use --no-data. If you load data, ANALYZE, pg_dump --no-data, then reload the sql file, then the stats are lost. That workflow is very close to what pg_upgrade does. We solved the problem for pg_upgrade in commit 71b66171d0 by simply not updating the statistics when building an index and IsBinaryUpgrade. To solve the issue with dump --no-data, I propose that we change the test in 71b66171d0 to only update the stats if the physical relpages is non-zero. Patch attached: * If the dump is --no-data, or during pg_upgrade, the table will be empty, so the physical relpages will be zero and the restored stats won't be overwritten. * If (like in your example) the dump includes data, the new stats are based on real data, so they are better anyway. This is sort of like the case where autoanalyze kicks in. * If the dump is --statistics-only, then there won't be any indexes created in the SQL file, so when you restore the stats, they will remain until you do something else to change them. * If your example really is a problem, you'd need to dump first with - -no-statistics, and then with --statistics-only, and restore the two SQL files in order. Alternatively, we could put stats into SECTION_POST_DATA, which was already discussed[*], and we decided against it (though there was not a clear consensus). Regards, Jeff Davis *: https://www.postgresql.org/message-id/1798867.1712376328%40sss.pgh.pa.us --=-Q0F+4LC/PGyd4BEWXhJ0 Content-Disposition: attachment; filename*0=v1-0001-Do-not-update-stats-on-empty-table-when-building-.pat; filename*1=ch Content-Type: text/x-patch; name="v1-0001-Do-not-update-stats-on-empty-table-when-building-.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA4NmMwM2NiNTI1YjQ5ZDI0MDE5YzVjMGVhOGVjMzZiYjgyYjNjNThhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDI3IEZlYiAyMDI1IDE3OjA2OjAwIC0wODAwClN1YmplY3Q6IFtQQVRDSCB2MV0gRG8gbm90 IHVwZGF0ZSBzdGF0cyBvbiBlbXB0eSB0YWJsZSB3aGVuIGJ1aWxkaW5nIGluZGV4LgoKV2UgcHJl dmlvdXNseSBmaXhlZCB0aGlzIGZvciBiaW5hcnkgdXBncmFkZSBpbiA3MWI2NjE3MWQwLCBidXQg YQpzaW1pbGFyIHByb2JsZW0gZXhpc3RzIHdoZW4gdXNpbmcgcGdfZHVtcCAtLW5vLWRhdGEgd2l0 aG91dCBwZ191cGdyYWRlCmludm9sdmVkLiBGaXggYm90aCBwcm9ibGVtcyBieSBub3QgdXBkYXRp bmcgdGhlIHN0YXRzIHdoZW4gdGhlIHRhYmxlCmhhcyBubyBwYWdlcy4KClJlcG9ydGVkLWJ5OiBB c2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUV4SFc1dmY5RCs4LWE1X0JFWDN5PTJ5X3hZOWhpQ3hWMT1D K0ZueER2ZnByV3ZrbmdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2lu ZGV4LmMgICAgICAgICAgICAgICAgfCAxNyArKysrKysrKysrKy0tLS0tLQogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zdGF0c19pbXBvcnQub3V0IHwgMjIgKysrKysrKysrKysrKysrKysrKysr LQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfaW1wb3J0LnNxbCAgICAgIHwgMTIgKysrKysr KysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQ0IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9pbmRleC5jCmluZGV4IGYzN2I5OTBjODFkLi4xYTNmZGVhYjM1MCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv aW5kZXguYwpAQCAtMjgzMywxMSArMjgzMyw3IEBAIGluZGV4X3VwZGF0ZV9zdGF0cyhSZWxhdGlv biByZWwsCiAJaWYgKHJlbHR1cGxlcyA9PSAwICYmIHJlbC0+cmRfcmVsLT5yZWx0dXBsZXMgPCAw KQogCQlyZWx0dXBsZXMgPSAtMTsKIAotCS8qCi0JICogRG9uJ3QgdXBkYXRlIHN0YXRpc3RpY3Mg ZHVyaW5nIGJpbmFyeSB1cGdyYWRlLCBiZWNhdXNlIHRoZSBpbmRleGVzIGFyZQotCSAqIGNyZWF0 ZWQgYmVmb3JlIHRoZSBkYXRhIGlzIG1vdmVkIGludG8gcGxhY2UuCi0JICovCi0JdXBkYXRlX3N0 YXRzID0gcmVsdHVwbGVzID49IDAgJiYgIUlzQmluYXJ5VXBncmFkZTsKKwl1cGRhdGVfc3RhdHMg PSByZWx0dXBsZXMgPj0gMDsKIAogCS8qCiAJICogRmluaXNoIEkvTyBhbmQgdmlzaWJpbGl0eSBt YXAgYnVmZmVyIGxvY2tzIGJlZm9yZQpAQCAtMjg1MCw3ICsyODQ2LDE2IEBAIGluZGV4X3VwZGF0 ZV9zdGF0cyhSZWxhdGlvbiByZWwsCiAJewogCQlyZWxwYWdlcyA9IFJlbGF0aW9uR2V0TnVtYmVy T2ZCbG9ja3MocmVsKTsKIAotCQlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9J TkRFWCkKKwkJLyoKKwkJICogRG9uJ3QgdXBkYXRlIHN0YXRpc3RpY3Mgd2hlbiB0aGUgcmVsYXRp b24gaXMgY29tcGxldGVseSBlbXB0eS4gVGhpcworCQkgKiBpcyBpbXBvcnRhbnQgZHVyaW5nIGJp bmFyeSB1cGdyYWRlLCBiZWNhdXNlIGF0IHRoZSB0aW1lIHRoZSBzY2hlbWEKKwkJICogaXMgbG9h ZGVkLCB0aGUgZGF0YSBoYXMgbm90IHlldCBiZWVuIG1vdmVkIGludG8gcGxhY2UuIEl0J3MgYWxz bworCQkgKiB1c2VmdWwgd2hlbiByZXN0b3JpbmcgYSBkdW1wIGNvbnRhaW5pbmcgb25seSBzY2hl bWEgYW5kIHN0YXRpc3RpY3MuCisJCSAqLworCQlpZiAocmVscGFnZXMgPT0gMCkKKwkJCXVwZGF0 ZV9zdGF0cyA9IGZhbHNlOworCisJCWlmICh1cGRhdGVfc3RhdHMgJiYgcmVsLT5yZF9yZWwtPnJl bGtpbmQgIT0gUkVMS0lORF9JTkRFWCkKIAkJCXZpc2liaWxpdHltYXBfY291bnQocmVsLCAmcmVs YWxsdmlzaWJsZSwgTlVMTCk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N0YXRzX2ltcG9ydC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRz X2ltcG9ydC5vdXQKaW5kZXggMWYxNTBmN2IwOGQuLjRjODFmYjYwYzkxIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2ltcG9ydC5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zdGF0c19pbXBvcnQub3V0CkBAIC0xMiwxNCArMTIsMzQgQEAgQ1JF QVRFIFRBQkxFIHN0YXRzX2ltcG9ydC50ZXN0KAogICAgIGFyYW5nZSBpbnQ0cmFuZ2UsCiAgICAg dGFncyB0ZXh0W10KICkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworU0VMRUNU CisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX3JlbGF0aW9uX3N0YXRzKAorICAgICAgICAncmVs YXRpb24nLCAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAgJ3JlbHBhZ2Vz JywgMTg6OmludGVnZXIsCisJJ3JlbHR1cGxlcycsIDIxOjpyZWFsLAorCSdyZWxhbGx2aXNpYmxl JywgMjQ6OmludGVnZXIpOworIHBnX3Jlc3RvcmVfcmVsYXRpb25fc3RhdHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKKy0tIGNyZWF0aW5nIGFuIGluZGV4IG9u IGFuIGVtcHR5IHRhYmxlIHNob3VsZG4ndCBvdmVyd3JpdGUgc3RhdHMKIENSRUFURSBJTkRFWCB0 ZXN0X2kgT04gc3RhdHNfaW1wb3J0LnRlc3QoaWQpOworU0VMRUNUIHJlbHBhZ2VzLCByZWx0dXBs ZXMsIHJlbGFsbHZpc2libGUKK0ZST00gcGdfY2xhc3MKK1dIRVJFIG9pZCA9ICdzdGF0c19pbXBv cnQudGVzdCc6OnJlZ2NsYXNzOworIHJlbHBhZ2VzIHwgcmVsdHVwbGVzIHwgcmVsYWxsdmlzaWJs ZSAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgICAgICAgMTggfCAg ICAgICAgMjEgfCAgICAgICAgICAgIDI0CisoMSByb3cpCisKIC0tIHN0YXJ0aW5nIHN0YXRzCiBT RUxFQ1QgcmVscGFnZXMsIHJlbHR1cGxlcywgcmVsYWxsdmlzaWJsZQogRlJPTSBwZ19jbGFzcwog V0hFUkUgb2lkID0gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3M7CiAgcmVscGFnZXMgfCBy ZWx0dXBsZXMgfCByZWxhbGx2aXNpYmxlIAogLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0KLSAgICAgICAgMCB8ICAgICAgICAtMSB8ICAgICAgICAgICAgIDAKKyAgICAgICAx OCB8ICAgICAgICAyMSB8ICAgICAgICAgICAgMjQKICgxIHJvdykKIAogQkVHSU47CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19pbXBvcnQuc3FsIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvc3RhdHNfaW1wb3J0LnNxbAppbmRleCA4YzE4M2JjZWI4YS4uYzhhYmI3MTUxMzAg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2ltcG9ydC5zcWwKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfaW1wb3J0LnNxbApAQCAtMTUsOCArMTUsMjAgQEAg Q1JFQVRFIFRBQkxFIHN0YXRzX2ltcG9ydC50ZXN0KAogICAgIHRhZ3MgdGV4dFtdCiApIFdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKIAorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5w Z19yZXN0b3JlX3JlbGF0aW9uX3N0YXRzKAorICAgICAgICAncmVsYXRpb24nLCAnc3RhdHNfaW1w b3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAgJ3JlbHBhZ2VzJywgMTg6OmludGVnZXIsCisJ J3JlbHR1cGxlcycsIDIxOjpyZWFsLAorCSdyZWxhbGx2aXNpYmxlJywgMjQ6OmludGVnZXIpOwor CistLSBjcmVhdGluZyBhbiBpbmRleCBvbiBhbiBlbXB0eSB0YWJsZSBzaG91bGRuJ3Qgb3Zlcndy aXRlIHN0YXRzCiBDUkVBVEUgSU5ERVggdGVzdF9pIE9OIHN0YXRzX2ltcG9ydC50ZXN0KGlkKTsK IAorU0VMRUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMsIHJlbGFsbHZpc2libGUKK0ZST00gcGdfY2xh c3MKK1dIRVJFIG9pZCA9ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzOworCiAtLSBzdGFy dGluZyBzdGF0cwogU0VMRUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMsIHJlbGFsbHZpc2libGUKIEZS T00gcGdfY2xhc3MKLS0gCjIuMzQuMQoK --=-Q0F+4LC/PGyd4BEWXhJ0--