pgsql: Add functions pg_set_attribute_stats() and pg_clear_attribute_st

Started by Jeff Davisover 1 year ago2 messagescomitters
Jump to latest
#1Jeff Davis
pgsql@j-davis.com

Add functions pg_set_attribute_stats() and pg_clear_attribute_stats().

Enable manipulation of attribute statistics. Only superficial
validation is performed, so it's possible to add nonsense, and it's up
to the planner (or other users of statistics) to behave reasonably in
that case.

Bump catalog version.

Author: Corey Huinker
Discussion: /messages/by-id/CADkLM=eErgzn7ECDpwFcptJKOk9SxZEk5Pot4d94eVTZsvj3gw@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/ce207d2a79017713c0293bf70132dc6d41166b03

Modified Files
--------------
doc/src/sgml/func.sgml | 72 +++
src/backend/catalog/system_functions.sql | 22 +
src/backend/statistics/Makefile | 1 +
src/backend/statistics/attribute_stats.c | 869 +++++++++++++++++++++++++++++
src/backend/statistics/meson.build | 1 +
src/backend/statistics/stat_utils.c | 73 +++
src/include/catalog/catversion.h | 2 +-
src/include/catalog/pg_proc.dat | 14 +
src/include/statistics/stat_utils.h | 7 +
src/test/regress/expected/stats_import.out | 659 +++++++++++++++++++++-
src/test/regress/sql/stats_import.sql | 545 ++++++++++++++++++
11 files changed, 2263 insertions(+), 2 deletions(-)

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Jeff Davis (#1)
Re: pgsql: Add functions pg_set_attribute_stats() and pg_clear_attribute_st

Jeff Davis <jdavis@postgresql.org> writes:

Add functions pg_set_attribute_stats() and pg_clear_attribute_stats().

A couple of buildfarm animals, eg [1]https://buildfarm.postgresql.org/cgi-bin/show_stage_log.pl?nm=rhinoceros&amp;dt=2024-10-23%2000%3A47%3A26&amp;stg=make, are mildly unhappy:

In file included from ../../../src/include/nodes/execnodes.h:37:0,
from ../../../src/include/catalog/indexing.h:19,
from attribute_stats.c:21:
attribute_stats.c: In function \342\200\230text_to_stavalues\342\200\231:
../../../src/include/nodes/miscnodes.h:54:15: warning: the comparison will always evaluate as \342\200\230true\342\200\231 for the address of \342\200\230escontext\342\200\231 will never be NULL [-Waddress]
((escontext) != NULL && IsA(escontext, ErrorSaveContext) && \\
^
attribute_stats.c:636:6: note: in expansion of macro \342\200\230SOFT_ERROR_OCCURRED\342\200\231
if (SOFT_ERROR_OCCURRED(&escontext))
^

I think what we've done in other places is just to test
escontext.error_occurred directly, since the rest of the
macro is useless in this situation.

regards, tom lane

[1]: https://buildfarm.postgresql.org/cgi-bin/show_stage_log.pl?nm=rhinoceros&amp;dt=2024-10-23%2000%3A47%3A26&amp;stg=make