diff options
| author | Ashutosh Bapat | 2011-06-29 08:09:12 +0000 |
|---|---|---|
| committer | Ashutosh Bapat | 2011-06-29 08:09:12 +0000 |
| commit | bc0decce1cb03d4f645f38bb61c7f73b16445fcb (patch) | |
| tree | 13cc37ff72f713ca83d90335cded4d75bca83215 /src/test | |
| parent | 51355d7b7c7cde644fd754ace4e21b746840e4f9 (diff) | |
Since aggregation can work without collection function, user need not provide
collection function for user-defined aggregate. But in such cases aggregate will
not be pushed to the datanodes.
This change also renders the alternate output file create_aggregate_1.out, hence
deleted it.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/create_aggregate_1.out | 73 | ||||
| -rw-r--r-- | src/test/regress/expected/polymorphism_1.out | 129 |
2 files changed, 61 insertions, 141 deletions
diff --git a/src/test/regress/expected/create_aggregate_1.out b/src/test/regress/expected/create_aggregate_1.out deleted file mode 100644 index a1afc03d0a..0000000000 --- a/src/test/regress/expected/create_aggregate_1.out +++ /dev/null @@ -1,73 +0,0 @@ --- --- CREATE_AGGREGATE --- --- all functions CREATEd -CREATE AGGREGATE newavg ( - sfunc = int4_avg_accum, basetype = int4, stype = _int8, - finalfunc = int8_avg, - initcond1 = '{0,0}' -); -ERROR: aggregate ctype must be specified --- test comments -COMMENT ON AGGREGATE newavg_wrong (int4) IS 'an agg comment'; -ERROR: aggregate newavg_wrong(integer) does not exist -COMMENT ON AGGREGATE newavg (int4) IS 'an agg comment'; -ERROR: aggregate newavg(integer) does not exist -COMMENT ON AGGREGATE newavg (int4) IS NULL; -ERROR: aggregate newavg(integer) does not exist --- without finalfunc; test obsolete spellings 'sfunc1' etc -CREATE AGGREGATE newsum ( - sfunc1 = int4pl, basetype = int4, stype1 = int4, - initcond1 = '0' -); -ERROR: aggregate ctype must be specified --- zero-argument aggregate -CREATE AGGREGATE newcnt (*) ( - sfunc = int8inc, stype = int8, - initcond = '0' -); -ERROR: aggregate ctype must be specified --- old-style spelling of same -CREATE AGGREGATE oldcnt ( - sfunc = int8inc, basetype = 'ANY', stype = int8, - initcond = '0' -); -ERROR: aggregate ctype must be specified --- aggregate that only cares about null/nonnull input -CREATE AGGREGATE newcnt ("any") ( - sfunc = int8inc_any, stype = int8, - initcond = '0' -); -ERROR: aggregate ctype must be specified -COMMENT ON AGGREGATE nosuchagg (*) IS 'should fail'; -ERROR: aggregate nosuchagg(*) does not exist -COMMENT ON AGGREGATE newcnt (*) IS 'an agg(*) comment'; -ERROR: aggregate newcnt(*) does not exist -COMMENT ON AGGREGATE newcnt ("any") IS 'an agg(any) comment'; -ERROR: aggregate newcnt("any") does not exist --- multi-argument aggregate -create function sum3(int8,int8,int8) returns int8 as -'select $1 + $2 + $3' language sql strict immutable; -create aggregate sum2(int8,int8) ( - sfunc = sum3, stype = int8, - initcond = '0' -); -ERROR: aggregate ctype must be specified --- multi-argument aggregates sensitive to distinct/order, strict/nonstrict -create type aggtype as (a integer, b integer, c text); -create function aggf_trans(aggtype[],integer,integer,text) returns aggtype[] -as 'select array_append($1,ROW($2,$3,$4)::aggtype)' -language sql strict immutable; -create function aggfns_trans(aggtype[],integer,integer,text) returns aggtype[] -as 'select array_append($1,ROW($2,$3,$4)::aggtype)' -language sql immutable; -create aggregate aggfstr(integer,integer,text) ( - sfunc = aggf_trans, stype = aggtype[], - initcond = '{}' -); -ERROR: aggregate ctype must be specified -create aggregate aggfns(integer,integer,text) ( - sfunc = aggfns_trans, stype = aggtype[], - initcond = '{}' -); -ERROR: aggregate ctype must be specified diff --git a/src/test/regress/expected/polymorphism_1.out b/src/test/regress/expected/polymorphism_1.out index 008c399498..774f935dac 100644 --- a/src/test/regress/expected/polymorphism_1.out +++ b/src/test/regress/expected/polymorphism_1.out @@ -76,28 +76,28 @@ CREATE FUNCTION ffnp(int[]) returns int[] as -- should CREATE CREATE AGGREGATE myaggp01a(*) (SFUNC = stfnp, STYPE = int4[], FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- P N -- should ERROR: stfnp(anyarray) not matched by stfnp(int[]) CREATE AGGREGATE myaggp02a(*) (SFUNC = stfnp, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. -- N P -- should CREATE CREATE AGGREGATE myaggp03a(*) (SFUNC = stfp, STYPE = int4[], FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified CREATE AGGREGATE myaggp03b(*) (SFUNC = stfp, STYPE = int4[], INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- P P -- should ERROR: we have no way to resolve S CREATE AGGREGATE myaggp04a(*) (SFUNC = stfp, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. CREATE AGGREGATE myaggp04b(*) (SFUNC = stfp, STYPE = anyarray, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. -- Case2 (R = P) && ((B = P) || (B = N)) -- ------------------------------------- -- S tf1 B tf2 @@ -106,106 +106,103 @@ ERROR: aggregate ctype must be specified -- should CREATE CREATE AGGREGATE myaggp05a(BASETYPE = int, SFUNC = tfnp, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- N N N P -- should CREATE CREATE AGGREGATE myaggp06a(BASETYPE = int, SFUNC = tf2p, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- N N P N -- should ERROR: tfnp(int[], anyelement) not matched by tfnp(int[], int) CREATE AGGREGATE myaggp07a(BASETYPE = anyelement, SFUNC = tfnp, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tfnp(integer[], anyelement) does not exist -- N N P P -- should CREATE CREATE AGGREGATE myaggp08a(BASETYPE = anyelement, SFUNC = tf2p, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- N P N N -- should CREATE CREATE AGGREGATE myaggp09a(BASETYPE = int, SFUNC = tf1p, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified CREATE AGGREGATE myaggp09b(BASETYPE = int, SFUNC = tf1p, STYPE = int[], INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- N P N P -- should CREATE CREATE AGGREGATE myaggp10a(BASETYPE = int, SFUNC = tfp, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified CREATE AGGREGATE myaggp10b(BASETYPE = int, SFUNC = tfp, STYPE = int[], INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- N P P N -- should ERROR: tf1p(int[],anyelement) not matched by tf1p(anyarray,int) CREATE AGGREGATE myaggp11a(BASETYPE = anyelement, SFUNC = tf1p, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tf1p(integer[], anyelement) does not exist CREATE AGGREGATE myaggp11b(BASETYPE = anyelement, SFUNC = tf1p, STYPE = int[], INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tf1p(integer[], anyelement) does not exist -- N P P P -- should ERROR: tfp(int[],anyelement) not matched by tfp(anyarray,anyelement) CREATE AGGREGATE myaggp12a(BASETYPE = anyelement, SFUNC = tfp, STYPE = int[], FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tfp(integer[], anyelement) does not exist CREATE AGGREGATE myaggp12b(BASETYPE = anyelement, SFUNC = tfp, STYPE = int[], INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tfp(integer[], anyelement) does not exist -- P N N N -- should ERROR: tfnp(anyarray, int) not matched by tfnp(int[],int) CREATE AGGREGATE myaggp13a(BASETYPE = int, SFUNC = tfnp, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. -- P N N P -- should ERROR: tf2p(anyarray, int) not matched by tf2p(int[],anyelement) CREATE AGGREGATE myaggp14a(BASETYPE = int, SFUNC = tf2p, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. -- P N P N -- should ERROR: tfnp(anyarray, anyelement) not matched by tfnp(int[],int) CREATE AGGREGATE myaggp15a(BASETYPE = anyelement, SFUNC = tfnp, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tfnp(anyarray, anyelement) does not exist -- P N P P -- should ERROR: tf2p(anyarray, anyelement) not matched by tf2p(int[],anyelement) CREATE AGGREGATE myaggp16a(BASETYPE = anyelement, SFUNC = tf2p, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tf2p(anyarray, anyelement) does not exist -- P P N N -- should ERROR: we have no way to resolve S CREATE AGGREGATE myaggp17a(BASETYPE = int, SFUNC = tf1p, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. CREATE AGGREGATE myaggp17b(BASETYPE = int, SFUNC = tf1p, STYPE = anyarray, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. -- P P N P -- should ERROR: tfp(anyarray, int) not matched by tfp(anyarray, anyelement) CREATE AGGREGATE myaggp18a(BASETYPE = int, SFUNC = tfp, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. CREATE AGGREGATE myaggp18b(BASETYPE = int, SFUNC = tfp, STYPE = anyarray, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. -- P P P N -- should ERROR: tf1p(anyarray, anyelement) not matched by tf1p(anyarray, int) CREATE AGGREGATE myaggp19a(BASETYPE = anyelement, SFUNC = tf1p, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tf1p(anyarray, anyelement) does not exist CREATE AGGREGATE myaggp19b(BASETYPE = anyelement, SFUNC = tf1p, STYPE = anyarray, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tf1p(anyarray, anyelement) does not exist -- P P P P -- should CREATE CREATE AGGREGATE myaggp20a(BASETYPE = anyelement, SFUNC = tfp, STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified CREATE AGGREGATE myaggp20b(BASETYPE = anyelement, SFUNC = tfp, STYPE = anyarray, INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- Case3 (R = N) && (B = A) -- ------------------------ -- S tf1 @@ -214,28 +211,28 @@ ERROR: aggregate ctype must be specified -- should CREATE CREATE AGGREGATE myaggn01a(*) (SFUNC = stfnp, STYPE = int4[], FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified CREATE AGGREGATE myaggn01b(*) (SFUNC = stfnp, STYPE = int4[], INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- P N -- should ERROR: stfnp(anyarray) not matched by stfnp(int[]) CREATE AGGREGATE myaggn02a(*) (SFUNC = stfnp, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. CREATE AGGREGATE myaggn02b(*) (SFUNC = stfnp, STYPE = anyarray, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. -- N P -- should CREATE CREATE AGGREGATE myaggn03a(*) (SFUNC = stfp, STYPE = int4[], FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- P P -- should ERROR: ffnp(anyarray) not matched by ffnp(int[]) CREATE AGGREGATE myaggn04a(*) (SFUNC = stfp, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. -- Case4 (R = N) && ((B = P) || (B = N)) -- ------------------------------------- -- S tf1 B tf2 @@ -244,110 +241,107 @@ ERROR: aggregate ctype must be specified -- should CREATE CREATE AGGREGATE myaggn05a(BASETYPE = int, SFUNC = tfnp, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified CREATE AGGREGATE myaggn05b(BASETYPE = int, SFUNC = tfnp, STYPE = int[], INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- N N N P -- should CREATE CREATE AGGREGATE myaggn06a(BASETYPE = int, SFUNC = tf2p, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified CREATE AGGREGATE myaggn06b(BASETYPE = int, SFUNC = tf2p, STYPE = int[], INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- N N P N -- should ERROR: tfnp(int[], anyelement) not matched by tfnp(int[], int) CREATE AGGREGATE myaggn07a(BASETYPE = anyelement, SFUNC = tfnp, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tfnp(integer[], anyelement) does not exist CREATE AGGREGATE myaggn07b(BASETYPE = anyelement, SFUNC = tfnp, STYPE = int[], INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tfnp(integer[], anyelement) does not exist -- N N P P -- should CREATE CREATE AGGREGATE myaggn08a(BASETYPE = anyelement, SFUNC = tf2p, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified CREATE AGGREGATE myaggn08b(BASETYPE = anyelement, SFUNC = tf2p, STYPE = int[], INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- N P N N -- should CREATE CREATE AGGREGATE myaggn09a(BASETYPE = int, SFUNC = tf1p, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- N P N P -- should CREATE CREATE AGGREGATE myaggn10a(BASETYPE = int, SFUNC = tfp, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified -- N P P N -- should ERROR: tf1p(int[],anyelement) not matched by tf1p(anyarray,int) CREATE AGGREGATE myaggn11a(BASETYPE = anyelement, SFUNC = tf1p, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tf1p(integer[], anyelement) does not exist -- N P P P -- should ERROR: tfp(int[],anyelement) not matched by tfp(anyarray,anyelement) CREATE AGGREGATE myaggn12a(BASETYPE = anyelement, SFUNC = tfp, STYPE = int[], FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tfp(integer[], anyelement) does not exist -- P N N N -- should ERROR: tfnp(anyarray, int) not matched by tfnp(int[],int) CREATE AGGREGATE myaggn13a(BASETYPE = int, SFUNC = tfnp, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. CREATE AGGREGATE myaggn13b(BASETYPE = int, SFUNC = tfnp, STYPE = anyarray, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. -- P N N P -- should ERROR: tf2p(anyarray, int) not matched by tf2p(int[],anyelement) CREATE AGGREGATE myaggn14a(BASETYPE = int, SFUNC = tf2p, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. CREATE AGGREGATE myaggn14b(BASETYPE = int, SFUNC = tf2p, STYPE = anyarray, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. -- P N P N -- should ERROR: tfnp(anyarray, anyelement) not matched by tfnp(int[],int) CREATE AGGREGATE myaggn15a(BASETYPE = anyelement, SFUNC = tfnp, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tfnp(anyarray, anyelement) does not exist CREATE AGGREGATE myaggn15b(BASETYPE = anyelement, SFUNC = tfnp, STYPE = anyarray, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tfnp(anyarray, anyelement) does not exist -- P N P P -- should ERROR: tf2p(anyarray, anyelement) not matched by tf2p(int[],anyelement) CREATE AGGREGATE myaggn16a(BASETYPE = anyelement, SFUNC = tf2p, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tf2p(anyarray, anyelement) does not exist CREATE AGGREGATE myaggn16b(BASETYPE = anyelement, SFUNC = tf2p, STYPE = anyarray, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tf2p(anyarray, anyelement) does not exist -- P P N N -- should ERROR: ffnp(anyarray) not matched by ffnp(int[]) CREATE AGGREGATE myaggn17a(BASETYPE = int, SFUNC = tf1p, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. -- P P N P -- should ERROR: tfp(anyarray, int) not matched by tfp(anyarray, anyelement) CREATE AGGREGATE myaggn18a(BASETYPE = int, SFUNC = tfp, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: cannot determine transition data type +DETAIL: An aggregate using a polymorphic transition type must have at least one polymorphic argument. -- P P P N -- should ERROR: tf1p(anyarray, anyelement) not matched by tf1p(anyarray, int) CREATE AGGREGATE myaggn19a(BASETYPE = anyelement, SFUNC = tf1p, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function tf1p(anyarray, anyelement) does not exist -- P P P P -- should ERROR: ffnp(anyarray) not matched by ffnp(int[]) CREATE AGGREGATE myaggn20a(BASETYPE = anyelement, SFUNC = tfp, STYPE = anyarray, FINALFUNC = ffnp, INITCOND = '{}'); -ERROR: aggregate ctype must be specified +ERROR: function ffnp(anyarray) does not exist -- multi-arg polymorphic CREATE AGGREGATE mysum2(anyelement,anyelement) (SFUNC = sum3, STYPE = anyelement, INITCOND = '0'); -ERROR: aggregate ctype must be specified -- create test data for polymorphic aggregates create temp table t(f1 int, f2 int[], f3 text); ERROR: PG-XC does not yet support temporary tables @@ -534,24 +528,23 @@ create aggregate build_group(anyelement, integer) ( SFUNC = add_group, STYPE = anyarray ); -ERROR: aggregate ctype must be specified select build_group(q1,3) from int8_tbl; -ERROR: function build_group(bigint, integer) does not exist -LINE 1: select build_group(q1,3) from int8_tbl; - ^ -HINT: No function matches the given name and argument types. You might need to add explicit type casts. + build_group +---------------------------- + {123,123,4567890123456789} +(1 row) + -- this should fail because stype isn't compatible with arg create aggregate build_group(int8, integer) ( SFUNC = add_group, STYPE = int2[] ); -ERROR: aggregate ctype must be specified +ERROR: function add_group(smallint[], bigint, integer) does not exist -- but we can make a non-poly agg from a poly sfunc if types are OK create aggregate build_group(int8, integer) ( SFUNC = add_group, STYPE = int8[] ); -ERROR: aggregate ctype must be specified -- check that we can apply functions taking ANYARRAY to pg_stats select distinct array_ndims(histogram_bounds) from pg_stats where histogram_bounds is not null; |
