postgresql/src/test/regress/sql
Tomas Vondra eae056c19e Apply multiple multivariate MCV lists when possible
Until now we've only used a single multivariate MCV list per relation,
covering the largest number of clauses. So for example given a query

    SELECT * FROM t WHERE a = 1 AND b =1 AND c = 1 AND d = 1

and extended statistics on (a,b) and (c,d), we'd only pick and use one
of them. This commit improves this by repeatedly picking and applying
the best statistics (matching the largest number of remaining clauses)
until no additional statistics is applicable.

This greedy algorithm is simple, but may not be optimal. A different
choice of statistics may leave fewer clauses unestimated and/or give
better estimates for some other reason.

This can however happen only when there are overlapping statistics, and
selecting one makes it impossible to use the other. E.g. with statistics
on (a,b), (c,d), (b,c,d), we may pick either (a,b) and (c,d) or (b,c,d).
But it's not clear which option is the best one.

We however assume cases like this are rare, and the easiest solution is
to define statistics covering the whole group of correlated columns. In
the future we might support overlapping stats, using some of the clauses
as conditions (in conditional probability sense).

Author: Tomas Vondra
Reviewed-by: Mark Dilger, Kyotaro Horiguchi
Discussion: https://postgr.es/m/20191028152048.jc6pqv5hb7j77ocp@development
2020-01-13 01:21:17 +01:00
..
.gitignore
advisory_lock.sql
aggregates.sql Test GROUP BY matching of join columns that are type-coerced by USING. 2020-01-01 19:31:41 -05:00
alter_generic.sql Fix comment in test 2020-01-02 14:40:18 +01:00
alter_operator.sql Avoid unnecessary use of pg_strcasecmp for already-downcased identifiers. 2018-01-26 18:25:14 -05:00
alter_table.sql Add a regression test for allow_system_table_mods 2019-11-29 10:22:13 +01:00
amutils.sql Add support for nearest-neighbor (KNN) searches to SP-GiST 2018-09-19 01:54:10 +03:00
arrays.sql Improve expression evaluation test coverage. 2017-03-11 15:41:34 -08:00
async.sql Add new function pg_notification_queue_usage. 2015-07-17 09:12:03 -04:00
bit.sql Fix bitshiftright()'s zero-padding some more. 2019-10-04 10:34:40 -04:00
bitmapops.sql
boolean.sql Expand AND/OR regression tests around NULL handling. 2018-03-13 16:12:31 -07:00
box.sql Add support for <-> (box, point) operator to SP-GiST box_ops 2019-07-14 15:09:23 +03:00
brin.sql Fix BRIN cost estimation 2017-04-06 17:51:53 -03:00
btree_index.sql Fix corner-case failure in match_pattern_prefix(). 2019-11-19 17:03:34 -05:00
case.sql Fix interaction of CASE and ArrayCoerceExpr. 2018-10-30 15:26:11 -04:00
char.sql
circle.sql Back off output precision in circle.sql regression test. 2019-08-25 12:14:50 -04:00
cluster.sql Fix CLUSTER on expression indexes. 2019-10-15 10:40:13 -07:00
collate.icu.utf8.sql Fix random regression failure in test case "collate.icu.utf8" 2019-08-14 13:37:48 +09:00
collate.linux.utf8.sql Remove obsolete collation test. 2019-10-16 18:02:23 +13:00
collate.sql Un-hide most cascaded-drop details in regression test results. 2019-03-24 19:15:37 -04:00
combocid.sql Fix locking a tuple updated by an aborted (sub)transaction 2016-09-09 15:54:29 -03:00
comments.sql
conversion.sql Establish conventions about global object names used in regression tests. 2016-07-17 18:42:43 -04:00
copy2.sql Allow COPY FROM to filter data using WHERE conditions 2019-01-20 00:22:14 +01:00
copydml.sql COPY (INSERT/UPDATE/DELETE .. RETURNING ..) 2015-11-27 19:11:22 +03:00
copyselect.sql
create_aggregate.sql Implement OR REPLACE option for CREATE AGGREGATE. 2019-03-19 01:16:50 +00:00
create_am.sql Stop using spelling "nonexistant". 2019-06-08 10:12:26 -07:00
create_cast.sql Make CREATE TYPE print warnings if a datatype's I/O functions are volatile. 2014-11-05 11:44:06 -05:00
create_function_3.sql Un-hide most cascaded-drop details in regression test results. 2019-03-24 19:15:37 -04:00
create_index_spgist.sql Provide stable test for NULL-values in KNN SP-GiST 2019-09-20 15:33:45 +03:00
create_index.sql Fix error reporting for index expressions of prohibited types. 2019-12-17 17:44:27 -05:00
create_misc.sql ANALYZE a_star and its children to avoid plan instability in tests. 2019-09-27 11:28:24 -04:00
create_operator.sql Fix lexing of standard multi-character operators in edge cases. 2018-08-23 21:42:40 +01:00
create_procedure.sql Add collation assignment to CALL statement 2019-02-07 08:25:47 +01:00
create_table_like.sql Fix handling of GENERATED columns in CREATE TABLE LIKE INCLUDING DEFAULTS. 2019-09-25 17:30:42 -04:00
create_table.sql Allow whole-row Vars to be used in partitioning expressions. 2019-12-25 15:44:15 -05:00
create_type.sql Fix format_type() to restore its old behavior. 2018-03-01 11:37:46 -05:00
create_view.sql Improve test coverage of ruleutils.c. 2019-12-06 17:40:30 -05:00
date.sql Remove explicit error handling for obsolete date/time values 2019-06-30 10:27:35 +02:00
dbsize.sql Add pg_size_bytes() to parse human-readable size strings. 2016-02-20 09:57:27 +00:00
delete.sql
dependency.sql Un-hide most cascaded-drop details in regression test results. 2019-03-24 19:15:37 -04:00
domain.sql Drop no-op CoerceToDomain nodes from expressions at planning time. 2018-12-13 13:24:43 -05:00
drop_if_exists.sql Introduce the 'force' option for the Drop Database command. 2019-11-13 08:25:33 +05:30
drop_operator.sql Fix DROP OPERATOR to reset oprcom/oprnegate links to the dropped operator. 2016-03-25 12:33:16 -04:00
enum.sql Relax transactional restrictions on ALTER TYPE ... ADD VALUE (redux). 2018-10-09 12:51:01 +13:00
equivclass.sql Reduce "X = X" to "X IS NOT NULL", if it's easy to do so. 2017-10-08 12:23:32 -04:00
errors.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
event_trigger.sql Un-hide most cascaded-drop details in regression test results. 2019-03-24 19:15:37 -04:00
expressions.sql Add some test cases to improve test coverage of parse_expr.c. 2019-07-05 23:56:34 -04:00
fast_default.sql Fix heap_getattr() handling of fast defaults. 2019-02-06 01:09:32 -08:00
float4.sql Improve coverage of utils/float.h 2019-08-28 12:28:16 +09:00
float8.sql Un-hide most cascaded-drop details in regression test results. 2019-03-24 19:15:37 -04:00
foreign_data.sql Fix partitioned index creation with foreign partitions 2019-06-26 18:38:51 -04:00
foreign_key.sql Fix SET CONSTRAINTS .. DEFERRED on partitioned tables 2019-11-07 13:59:24 -03:00
functional_deps.sql
generated.sql Fix handling of generated columns in ALTER TABLE. 2020-01-08 09:42:53 -05:00
geometry.sql Add missing commutators for distance operators 2019-07-14 14:55:01 +03:00
gin.sql Make GIN regression test stable. 2016-02-08 23:41:46 +09:00
gist.sql Add support for <-> (box, point) operator to GiST box_ops 2019-07-14 15:09:15 +03:00
groupingsets.sql Add missing (COSTS OFF) to EXPLAIN added in previous commit. 2019-07-25 14:52:36 -07:00
guc.sql Give up on testing guc.c's behavior for "infinity" inputs. 2019-03-11 17:53:09 -04:00
hash_func.sql Introduce 64-bit hash functions with a 64-bit seed. 2017-08-31 22:21:21 -04:00
hash_index.sql Add more tests for reloptions 2017-10-19 14:22:05 +02:00
hash_part.sql Fix failure with textual partition hash keys. 2019-04-15 16:47:09 -04:00
horology.sql Support for SSSSS datetime format pattern 2019-09-16 21:14:56 +03:00
hs_primary_extremes.sql Remove all references to "xlog" from SQL-callable functions in pg_proc. 2017-02-09 15:10:09 -05:00
hs_primary_setup.sql Remove all references to "xlog" from SQL-callable functions in pg_proc. 2017-02-09 15:10:09 -05:00
hs_standby_allowed.sql Allow UNLISTEN in hot-standby mode. 2019-01-25 21:14:49 -05:00
hs_standby_check.sql
hs_standby_disallowed.sql Allow UNLISTEN in hot-standby mode. 2019-01-25 21:14:49 -05:00
hs_standby_functions.sql Remove all references to "xlog" from SQL-callable functions in pg_proc. 2017-02-09 15:10:09 -05:00
identity.sql Make identity sequence management more robust 2019-07-22 12:07:10 +02:00
index_including_gist.sql Support for INCLUDE attributes in GiST indexes 2019-03-10 11:37:17 +03:00
index_including.sql Fix nbtree high key "continuescan" row compare bug. 2019-03-31 17:24:04 -07:00
indexing.sql Fix dependency handling of column drop with partitioned tables 2019-10-13 17:51:55 +09:00
indirect_toast.sql Clean up duplicate table and function names in regression tests. 2018-03-15 17:09:02 -04:00
inet.sql Add sort support routine for the inet data type. 2019-08-01 09:34:14 -07:00
inherit.sql Allow access to child table statistics if user can read parent table. 2019-11-26 14:41:48 -05:00
init_privs.sql Fix typos in comments. 2017-02-06 11:33:58 +02:00
insert_conflict.sql Don't mark partitioned indexes invalid unnecessarily 2018-12-05 13:31:51 -03:00
insert.sql Add tests for error message generation in partition tuple routing 2019-05-06 21:44:24 +09:00
int2.sql Add documentation and regression tests concerning rounding of numerics. 2015-07-03 17:04:39 -04:00
int4.sql Add documentation and regression tests concerning rounding of numerics. 2015-07-03 17:04:39 -04:00
int8.sql Add documentation and regression tests concerning rounding of numerics. 2015-07-03 17:04:39 -04:00
interval.sql Fix integer-overflow edge case detection in interval_mul and pgbench. 2019-11-07 11:22:58 -05:00
join_hash.sql Fix representation of hash keys in Hash/HashJoin nodes. 2019-08-02 00:02:46 -07:00
join.sql Prevent overly-aggressive collapsing of joins to RTE_RESULT relations. 2019-12-14 13:49:15 -05:00
json_encoding.sql Fix whitespace 2015-10-11 21:44:27 -04:00
json.sql Remove unnecessary test dependency on the contents of pg_pltemplate. 2019-08-21 10:43:23 -04:00
jsonb_jsonpath.sql Refactor jsonpath's compareDatetime() 2019-10-21 23:07:07 +03:00
jsonb.sql Remove unnecessary test dependency on the contents of pg_pltemplate. 2019-08-21 10:43:23 -04:00
jsonpath_encoding.sql Fix some minor spec-compliance issues in jsonpath lexer. 2019-09-20 14:22:58 -04:00
jsonpath.sql Implement jsonpath .datetime() method 2019-09-25 22:51:51 +03:00
limit.sql Add regression tests exercising more code paths in nodeLimit.c. 2017-08-11 17:28:01 -04:00
line.sql Improve test coverage of geometric types 2018-09-26 10:45:21 +02:00
lock.sql Add more infinite recursion detection while locking a view. 2018-04-17 16:59:17 +09:00
lseg.sql Improve test coverage of geometric types 2018-09-26 10:45:21 +02:00
macaddr8.sql Add support for EUI-64 MAC addresses as macaddr8 2017-03-15 11:16:25 -04:00
macaddr.sql Allow input format xxxx-xxxx-xxxx for macaddr type 2014-10-21 16:16:39 -04:00
matview.sql Remove useless and rather expensive stanza in matview regression test. 2017-05-03 19:37:01 -04:00
misc_functions.sql Build out the planner support function infrastructure. 2019-02-09 18:32:23 -05:00
misc_sanity.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
money.sql Fix loss of fractional digits for large values in cash_numeric(). 2019-07-26 11:59:00 -04:00
name.sql Introduce parse_ident() 2016-03-18 18:16:14 +03:00
namespace.sql Clean up duplicate role and schema names in regression tests. 2018-03-15 14:00:31 -04:00
numeric_big.sql Fix corner-case loss of precision in numeric pow() calculation 2016-05-05 11:16:17 +01:00
numeric.sql Add functions min_scale(numeric) and trim_scale(numeric). 2020-01-06 12:13:53 -05:00
numerology.sql
object_address.sql Warn if wal_level is too low when creating a publication. 2019-07-13 10:35:34 +12:00
oid.sql
oidjoins.sql Rework the pg_statistic_ext catalog 2019-06-16 01:20:31 +02:00
opr_sanity.sql Straighten out leakproofness markings on text comparison functions. 2019-09-21 16:56:30 -04:00
partition_aggregate.sql Avoid crash in partitionwise join planning under GEQO. 2019-03-30 12:48:32 -04:00
partition_info.sql Fix crash with pg_partition_root 2019-03-22 17:27:38 +09:00
partition_join.sql Clean up some misplaced comments in partition_join.sql regression test. 2019-12-16 17:00:15 +09:00
partition_prune.sql Fix "force_parallel_mode = regress" to work with ANALYZE + VERBOSE. 2019-12-16 20:14:35 -05:00
password.sql Fix use of term "verifier" 2019-10-12 21:41:59 +02:00
path.sql Improve test coverage of geometric types 2018-09-26 10:45:21 +02:00
pg_lsn.sql Add min() and max() aggregates for pg_lsn 2019-07-05 12:21:11 +09:00
plancache.sql Add plan_cache_mode setting 2018-07-16 13:35:41 +02:00
plpgsql.sql Add backend-only appendStringInfoStringQuoted 2019-12-10 17:12:56 -03:00
point.sql Change floating-point output format for improved performance. 2019-02-13 15:20:33 +00:00
polygon.sql Fix double-word typos 2019-06-13 10:03:56 -04:00
polymorphism.sql Fix lexing of standard multi-character operators in edge cases. 2018-08-23 21:42:40 +01:00
portals_p2.sql
portals.sql Fix failure in WHERE CURRENT OF after rewinding the referenced cursor. 2018-09-23 16:05:45 -04:00
prepare.sql Add more tests for CREATE TABLE AS with WITH NO DATA 2019-02-07 09:21:57 +09:00
prepared_xacts.sql Remove unnecessary dependency on statement_timeout in prepared_xacts test. 2017-03-13 16:46:32 -04:00
privileges.sql Use checkAsUser for selectivity estimator checks, if it's set. 2019-05-06 11:54:32 +01:00
psql_crosstab.sql Fix incorrect error reporting for duplicate data in \crosstabview. 2016-12-25 16:04:45 -05:00
psql.sql Improve coverage of psql for backslash commands with \if and \elif 2019-09-12 10:35:13 +09:00
publication.sql Warn if wal_level is too low when creating a publication. 2019-07-13 10:35:34 +12:00
random.sql
rangefuncs.sql Improve the handling of result type coercions in SQL functions. 2020-01-08 11:07:59 -05:00
rangetypes.sql Prevent a rowtype from being included in itself via a range. 2019-12-23 12:08:23 -05:00
regex.linux.utf8.sql Make locale-dependent regex character classes work for large char codes. 2016-09-05 17:06:29 -04:00
regex.sql Fix misoptimization of "{1,1}" quantifiers in regular expressions. 2019-05-12 18:53:38 -04:00
regproc.sql Establish conventions about global object names used in regression tests. 2016-07-17 18:42:43 -04:00
reindex_catalog.sql Remove reindex_catalog test from test schedules. 2019-05-10 12:44:31 -07:00
reloptions.sql Add vacuum_truncate reloption. 2019-04-08 16:43:57 +09:00
replica_identity.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
returning.sql Add support for INSERT ... ON CONFLICT DO NOTHING/UPDATE. 2015-05-08 05:43:10 +02:00
roleattributes.sql Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
rowsecurity.sql Fix usage of whole-row variables in WCO and RLS policy expressions. 2019-09-12 18:29:45 -04:00
rowtypes.sql Allow extracting fields from a ROW() expression in more cases. 2019-10-28 15:08:24 -04:00
rules.sql Improve test coverage of ruleutils.c. 2019-12-06 17:40:30 -05:00
sanity_check.sql Don't create relfilenode for relations without storage 2019-01-04 14:51:17 -03:00
security_label.sql Establish conventions about global object names used in regression tests. 2016-07-17 18:42:43 -04:00
select_distinct_on.sql
select_distinct.sql Disable physical tlist if any Var would need multiple sortgroupref labels. 2016-05-26 14:52:30 -04:00
select_having.sql
select_implicit.sql
select_into.sql Add more tests for CREATE TABLE AS with WITH NO DATA 2019-02-07 09:21:57 +09:00
select_parallel.sql Don't shut down Gather[Merge] early under Limit. 2019-11-26 08:30:24 +05:30
select_views.sql Avoid locale-dependent output in select_views regression test. 2017-05-28 14:52:18 -04:00
select.sql Make some subquery-using test cases a bit more robust. 2018-10-14 14:02:59 -04:00
sequence.sql Make command order in test more sensible 2019-10-22 10:35:54 +02:00
spgist.sql Repair double-free in SP-GIST rescan (bug #15378) 2018-09-11 18:14:19 +01:00
stats_ext.sql Apply multiple multivariate MCV lists when possible 2020-01-13 01:21:17 +01:00
stats.sql Partially revert "Insert temporary debugging output in regression tests." 2019-08-11 18:55:32 -04:00
strings.sql Handle empty-string edge cases correctly in strpos(). 2019-10-28 12:21:13 -04:00
subscription.sql Fix regression tests to use only global names beginning with "regress_". 2019-06-29 11:09:03 -04:00
subselect.sql Fix "force_parallel_mode = regress" to work with ANALYZE + VERBOSE. 2019-12-16 20:14:35 -05:00
sysviews.sql Invent pg_hba_file_rules view to show the content of pg_hba.conf. 2017-01-30 18:00:26 -05:00
tablesample.sql Make tablesample work with partitioned tables. 2017-02-24 12:23:28 +05:30
temp.sql Fix misbehavior with expression indexes on ON COMMIT DELETE ROWS tables. 2019-12-01 13:09:26 -05:00
text.sql
tidscan.sql Add a hash opclass for type "tid". 2018-12-30 15:40:04 -05:00
time.sql
timestamp.sql Avoid low-probability regression test failures in timestamp[tz] tests. 2019-12-22 18:00:22 -05:00
timestamptz.sql Avoid low-probability regression test failures in timestamp[tz] tests. 2019-12-22 18:00:22 -05:00
timetz.sql Fix some incorrect parsing of time with time zone strings 2019-08-07 18:16:31 +09:00
transactions.sql Improve new AND CHAIN tests 2019-09-09 10:30:22 +02:00
triggers.sql Fix cloning of row triggers to sub-partitions 2020-01-02 17:04:24 -03:00
truncate.sql Un-hide most cascaded-drop details in regression test results. 2019-03-24 19:15:37 -04:00
tsdicts.sql Validate ispell dictionaries more carefully. 2019-11-02 16:45:32 -04:00
tsearch.sql Allow functions-in-FROM to be pulled up if they reduce to constants. 2019-08-01 18:50:22 -04:00
tsrf.sql Fix handling of targetlist SRFs when scan/join relation is known empty. 2019-03-07 14:22:13 -05:00
tstypes.sql More float test and portability fixes. 2019-02-13 19:35:50 +00:00
tuplesort.sql Try to stabilize results of new tuplesort regression test. 2019-12-14 15:01:56 -05:00
txid.sql Add a txid_status function. 2017-03-24 12:00:53 -04:00
type_sanity.sql Harden tableam against nonexistant / wrong kind of AMs. 2019-04-04 17:39:39 -07:00
typed_table.sql Suppress less info in regression tests using DROP CASCADE. 2017-08-01 16:49:23 -04:00
union.sql Repair issues with faulty generation of merge-append plans. 2019-05-09 16:53:05 -04:00
updatable_views.sql Add test case exercising formerly-unreached code in inheritance_planner. 2019-03-31 15:49:06 -04:00
update.sql Fix system column accesses in ON CONFLICT ... RETURNING. 2019-07-24 18:45:58 -07:00
uuid.sql Add gen_random_uuid function 2019-07-14 14:30:27 +02:00
vacuum.sql Improve stability of tests for VACUUM (SKIP_LOCKED) 2019-11-16 15:23:12 +09:00
varchar.sql
window.sql Selectively include window frames in expression walks/mutates. 2019-10-03 10:54:52 +01:00
with.sql Revert MERGE patch 2018-04-12 11:22:56 +01:00
write_parallel.sql Allow DML commands that create tables to use parallel query. 2017-10-05 11:40:48 -04:00
xml.sql Avoid failure when selecting a namespace node in XMLTABLE. 2019-10-25 15:22:45 -04:00
xmlmap.sql Fix cursor_to_xml in tableforest false mode 2017-05-03 21:41:10 -04:00