1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-25 21:42:33 +03:00

Improve pg_set_attribute_stats() error message.

Previously, an invalid attribute name was caught, but the error
message was unhelpful.
This commit is contained in:
Jeff Davis 2024-10-23 16:11:45 -07:00
parent 7b8b8dddd6
commit 4b096c67e0
3 changed files with 54 additions and 2 deletions

View File

@ -161,6 +161,11 @@ attribute_statistics_update(FunctionCallInfo fcinfo, int elevel)
stats_check_required_arg(fcinfo, attarginfo, ATTNAME_ARG);
attname = PG_GETARG_NAME(ATTNAME_ARG);
attnum = get_attnum(reloid, NameStr(*attname));
if (attnum == InvalidAttrNumber)
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_COLUMN),
errmsg("column \"%s\" of relation \"%s\" does not exist",
NameStr(*attname), get_rel_name(reloid))));
stats_check_required_arg(fcinfo, attarginfo, INHERITED_ARG);
inherited = PG_GETARG_BOOL(INHERITED_ARG);
@ -860,6 +865,11 @@ pg_clear_attribute_stats(PG_FUNCTION_ARGS)
stats_check_required_arg(fcinfo, attarginfo, ATTNAME_ARG);
attname = PG_GETARG_NAME(ATTNAME_ARG);
attnum = get_attnum(reloid, NameStr(*attname));
if (attnum == InvalidAttrNumber)
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_COLUMN),
errmsg("column \"%s\" of relation \"%s\" does not exist",
NameStr(*attname), get_rel_name(reloid))));
stats_check_required_arg(fcinfo, attarginfo, INHERITED_ARG);
inherited = PG_GETARG_BOOL(INHERITED_ARG);

View File

@ -180,6 +180,12 @@ SELECT pg_catalog.pg_set_attribute_stats(
avg_width => 2::integer,
n_distinct => 0.3::real);
ERROR: could not open relation with OID 0
-- error: object doesn't exist
SELECT pg_catalog.pg_clear_attribute_stats(
relation => '0'::oid,
attname => 'id'::name,
inherited => false::boolean);
ERROR: could not open relation with OID 0
-- error: relation null
SELECT pg_catalog.pg_set_attribute_stats(
relation => NULL::oid,
@ -189,6 +195,21 @@ SELECT pg_catalog.pg_set_attribute_stats(
avg_width => 2::integer,
n_distinct => 0.3::real);
ERROR: "relation" cannot be NULL
-- error: attname doesn't exist
SELECT pg_catalog.pg_set_attribute_stats(
relation => 'stats_import.test'::regclass,
attname => 'nope'::name,
inherited => false::boolean,
null_frac => 0.1::real,
avg_width => 2::integer,
n_distinct => 0.3::real);
ERROR: column "nope" of relation "test" does not exist
-- error: attname doesn't exist
SELECT pg_catalog.pg_clear_attribute_stats(
relation => 'stats_import.test'::regclass,
attname => 'nope'::name,
inherited => false::boolean);
ERROR: column "nope" of relation "test" does not exist
-- error: attname null
SELECT pg_catalog.pg_set_attribute_stats(
relation => 'stats_import.test'::regclass,
@ -301,7 +322,7 @@ SELECT pg_catalog.pg_set_attribute_stats(
most_common_freqs => '{0.2,0.1}'::real[]
);
ERROR: invalid input syntax for type integer: "2023-09-30"
-- warning: mcv cast failure
-- error: mcv cast failure
SELECT pg_catalog.pg_set_attribute_stats(
relation => 'stats_import.test'::regclass,
attname => 'id'::name,

View File

@ -130,6 +130,12 @@ SELECT pg_catalog.pg_set_attribute_stats(
avg_width => 2::integer,
n_distinct => 0.3::real);
-- error: object doesn't exist
SELECT pg_catalog.pg_clear_attribute_stats(
relation => '0'::oid,
attname => 'id'::name,
inherited => false::boolean);
-- error: relation null
SELECT pg_catalog.pg_set_attribute_stats(
relation => NULL::oid,
@ -139,6 +145,21 @@ SELECT pg_catalog.pg_set_attribute_stats(
avg_width => 2::integer,
n_distinct => 0.3::real);
-- error: attname doesn't exist
SELECT pg_catalog.pg_set_attribute_stats(
relation => 'stats_import.test'::regclass,
attname => 'nope'::name,
inherited => false::boolean,
null_frac => 0.1::real,
avg_width => 2::integer,
n_distinct => 0.3::real);
-- error: attname doesn't exist
SELECT pg_catalog.pg_clear_attribute_stats(
relation => 'stats_import.test'::regclass,
attname => 'nope'::name,
inherited => false::boolean);
-- error: attname null
SELECT pg_catalog.pg_set_attribute_stats(
relation => 'stats_import.test'::regclass,
@ -231,7 +252,7 @@ SELECT pg_catalog.pg_set_attribute_stats(
most_common_freqs => '{0.2,0.1}'::real[]
);
-- warning: mcv cast failure
-- error: mcv cast failure
SELECT pg_catalog.pg_set_attribute_stats(
relation => 'stats_import.test'::regclass,
attname => 'id'::name,