diff --git a/src/backend/statistics/mcv.c b/src/backend/statistics/mcv.c index 2daefb26868..05ab6c9bb7a 100644 --- a/src/backend/statistics/mcv.c +++ b/src/backend/statistics/mcv.c @@ -905,7 +905,7 @@ statext_mcv_deserialize(bytea *data) VARSIZE_ANY(data), expected_size); /* Now copy the array of type Oids. */ - memcpy(ptr, mcvlist->types, sizeof(Oid) * ndims); + memcpy(mcvlist->types, ptr, sizeof(Oid) * ndims); ptr += (sizeof(Oid) * ndims); /* ensure alignment of the pointer (after the header fields) */ diff --git a/src/test/regress/expected/stats_ext.out b/src/test/regress/expected/stats_ext.out index b32663459d6..add968abec2 100644 --- a/src/test/regress/expected/stats_ext.out +++ b/src/test/regress/expected/stats_ext.out @@ -717,6 +717,17 @@ SELECT * FROM check_estimated_rows('SELECT * FROM mcv_lists WHERE a IS NULL AND 50 | 50 (1 row) +-- test pg_mcv_list_items with a very simple (single item) MCV list +TRUNCATE mcv_lists; +INSERT INTO mcv_lists (a, b, c) SELECT 1, 2, 3 FROM generate_series(1,1000) s(i); +ANALYZE mcv_lists; +SELECT m.* FROM pg_statistic_ext, + pg_mcv_list_items(stxmcv) m WHERE stxname = 'mcv_lists_stats'; + index | values | nulls | frequency | base_frequency +-------+-----------+---------+-----------+---------------- + 0 | {1, 2, 3} | {f,f,f} | 1 | 1 +(1 row) + RESET random_page_cost; -- mcv with arrays CREATE TABLE mcv_lists_arrays ( diff --git a/src/test/regress/sql/stats_ext.sql b/src/test/regress/sql/stats_ext.sql index 2a6a23c06d4..d4b2732493a 100644 --- a/src/test/regress/sql/stats_ext.sql +++ b/src/test/regress/sql/stats_ext.sql @@ -411,6 +411,14 @@ SELECT * FROM check_estimated_rows('SELECT * FROM mcv_lists WHERE a IS NULL AND SELECT * FROM check_estimated_rows('SELECT * FROM mcv_lists WHERE a IS NULL AND b IS NULL AND c IS NULL'); +-- test pg_mcv_list_items with a very simple (single item) MCV list +TRUNCATE mcv_lists; +INSERT INTO mcv_lists (a, b, c) SELECT 1, 2, 3 FROM generate_series(1,1000) s(i); +ANALYZE mcv_lists; + +SELECT m.* FROM pg_statistic_ext, + pg_mcv_list_items(stxmcv) m WHERE stxname = 'mcv_lists_stats'; + RESET random_page_cost; -- mcv with arrays