1
0
mirror of https://github.com/postgres/postgres.git synced 2026-01-05 23:38:41 +03:00

Use in-place updates for pg_restore_relation_stats().

This matches the behavior of vac_update_relstats(), which is important
to avoid bloating pg_class.

Author: Corey Huinker
Discussion: https://postgr.es/m/CADkLM=fc3je+ufv3gsHqjjSSf+t8674RXpuXW62EL55MUEQd-g@mail.gmail.com
This commit is contained in:
Jeff Davis
2024-12-10 16:30:37 -08:00
parent 8ede501685
commit a43567483c
4 changed files with 244 additions and 80 deletions

View File

@@ -76,6 +76,31 @@ SELECT relpages, reltuples, relallvisible
FROM pg_class
WHERE oid = 'stats_import.test'::regclass;
-- test MVCC behavior: changes do not persist after abort (in contrast
-- to pg_restore_relation_stats(), which uses in-place updates).
BEGIN;
SELECT
pg_catalog.pg_set_relation_stats(
relation => 'stats_import.test'::regclass,
relpages => NULL::integer,
reltuples => 4000.0::real,
relallvisible => 4::integer);
ABORT;
SELECT relpages, reltuples, relallvisible
FROM pg_class
WHERE oid = 'stats_import.test'::regclass;
BEGIN;
SELECT
pg_catalog.pg_clear_relation_stats(
'stats_import.test'::regclass);
ABORT;
SELECT relpages, reltuples, relallvisible
FROM pg_class
WHERE oid = 'stats_import.test'::regclass;
-- clear
SELECT
pg_catalog.pg_clear_relation_stats(
@@ -565,10 +590,22 @@ FROM pg_class
WHERE oid = 'stats_import.test'::regclass;
-- ok: just relpages
SELECT pg_restore_relation_stats(
'relation', 'stats_import.test'::regclass,
'version', 150000::integer,
'relpages', '15'::integer);
SELECT relpages, reltuples, relallvisible
FROM pg_class
WHERE oid = 'stats_import.test'::regclass;
-- test non-MVCC behavior: new value should persist after abort
BEGIN;
SELECT pg_restore_relation_stats(
'relation', 'stats_import.test'::regclass,
'version', 150000::integer,
'relpages', '16'::integer);
ABORT;
SELECT relpages, reltuples, relallvisible
FROM pg_class