postgresql/doc/src/sgml/ref
Tom Lane 608b167f9f Allow user control of CTE materialization, and change the default behavior.
Historically we've always materialized the full output of a CTE query,
treating WITH as an optimization fence (so that, for example, restrictions
from the outer query cannot be pushed into it).  This is appropriate when
the CTE query is INSERT/UPDATE/DELETE, or is recursive; but when the CTE
query is non-recursive and side-effect-free, there's no hazard of changing
the query results by pushing restrictions down.

Another argument for materialization is that it can avoid duplicate
computation of an expensive WITH query --- but that only applies if
the WITH query is called more than once in the outer query.  Even then
it could still be a net loss, if each call has restrictions that
would allow just a small part of the WITH query to be computed.

Hence, let's change the behavior for WITH queries that are non-recursive
and side-effect-free.  By default, we will inline them into the outer
query (removing the optimization fence) if they are called just once.
If they are called more than once, we will keep the old behavior by
default, but the user can override this and force inlining by specifying
NOT MATERIALIZED.  Lastly, the user can force the old behavior by
specifying MATERIALIZED; this would mainly be useful when the query had
deliberately been employing WITH as an optimization fence to prevent a
poor choice of plan.

Andreas Karlsson, Andrew Gierth, David Fetter

Discussion: https://postgr.es/m/87sh48ffhb.fsf@news-spur.riddles.org.uk
2019-02-16 16:11:12 -05:00
..
abort.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
allfiles.sgml Revert MERGE patch 2018-04-12 11:22:56 +01:00
alter_aggregate.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_collation.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_conversion.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_database.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_default_privileges.sgml Refactor documentation about privileges to centralize the info. 2018-12-03 11:40:49 -05:00
alter_domain.sgml Doc: document that we expect CHECK constraint conditions to be immutable. 2018-12-07 16:40:58 -05:00
alter_event_trigger.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_extension.sgml SQL procedures 2017-11-30 11:03:20 -05:00
alter_foreign_data_wrapper.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_foreign_table.sgml Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
alter_function.sgml Create the infrastructure for planner support functions. 2019-02-09 18:08:48 -05:00
alter_group.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_index.sgml Lower lock level for renaming indexes 2018-11-14 17:09:54 +01:00
alter_language.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_large_object.sgml Doc: improve documentation about ALTER LARGE OBJECT requirements. 2018-12-11 11:21:36 -05:00
alter_materialized_view.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_opclass.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_operator.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_opfamily.sgml doc: Update uses of the word "procedure" 2018-08-22 14:44:49 +02:00
alter_policy.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_procedure.sgml SQL procedures 2017-11-30 11:03:20 -05:00
alter_publication.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_role.sgml Clarify documentation about PASSWORD in CREATE/ALTER ROLE 2018-11-23 09:10:24 +09:00
alter_routine.sgml SQL procedures 2017-11-30 11:03:20 -05:00
alter_rule.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_schema.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_sequence.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_server.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_statistics.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_subscription.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_system.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_table.sgml Allow generalized expression syntax for partition bounds 2019-01-25 11:28:49 +01:00
alter_tablespace.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_trigger.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_tsconfig.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_tsdictionary.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_tsparser.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_tstemplate.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_type.sgml Relax transactional restrictions on ALTER TYPE ... ADD VALUE (redux). 2018-10-09 12:51:01 +13:00
alter_user.sgml Clarify documentation about PASSWORD in CREATE/ALTER ROLE 2018-11-23 09:10:24 +09:00
alter_user_mapping.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
alter_view.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
analyze.sgml Add option SKIP_LOCKED to VACUUM and ANALYZE 2018-10-04 09:00:33 +09:00
begin.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
call.sgml Fix bugs in plpgsql's handling of CALL argument lists. 2018-11-04 13:25:39 -05:00
checkpoint.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
close.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
cluster.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
clusterdb.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
comment.sgml SQL procedures 2017-11-30 11:03:20 -05:00
commit.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
commit_prepared.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
copy.sgml Allow COPY FROM to filter data using WHERE conditions 2019-01-20 00:22:14 +01:00
create_access_method.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_aggregate.sgml Improve spelling of new FINALFUNC_MODIFY aggregate attribute. 2018-05-21 11:41:42 -04:00
create_cast.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_collation.sgml doc: Improve CREATE COLLATION locking documentation 2018-07-30 22:09:48 +02:00
create_conversion.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_database.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_domain.sgml Doc: document that we expect CHECK constraint conditions to be immutable. 2018-12-07 16:40:58 -05:00
create_event_trigger.sgml Change PROCEDURE to FUNCTION in CREATE TRIGGER syntax 2018-08-22 14:44:49 +02:00
create_extension.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_foreign_data_wrapper.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_foreign_table.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_function.sgml Create the infrastructure for planner support functions. 2019-02-09 18:08:48 -05:00
create_group.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_index.sgml Disable recheck_on_update optimization to avoid crashes. 2018-11-06 18:33:28 -05:00
create_language.sgml doc: Update uses of the word "procedure" 2018-08-22 14:44:49 +02:00
create_materialized_view.sgml Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
create_opclass.sgml doc: Update uses of the word "procedure" 2018-08-22 14:44:49 +02:00
create_operator.sgml Change PROCEDURE to FUNCTION in CREATE OPERATOR syntax 2018-08-22 14:44:49 +02:00
create_opfamily.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_policy.sgml doc: Whitespace fixes in man pages 2018-05-21 14:43:24 -04:00
create_procedure.sgml Prohibit transaction commands in security definer procedures 2018-07-13 10:41:32 +02:00
create_publication.sgml Logical replication support for TRUNCATE 2018-04-07 11:34:11 -04:00
create_role.sgml Clarify documentation about PASSWORD in CREATE/ALTER ROLE 2018-11-23 09:10:24 +09:00
create_rule.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_schema.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_sequence.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_server.sgml docs: fix spacing around "if not exists" brackets 2018-03-29 21:25:39 -04:00
create_statistics.sgml Documentation spell checking and markup improvements 2018-06-29 21:26:41 +02:00
create_subscription.sgml Remove extra word from create sub docs 2018-11-03 12:21:54 -04:00
create_table.sgml Allow generalized expression syntax for partition bounds 2019-01-25 11:28:49 +01:00
create_table_as.sgml Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
create_tablespace.sgml doc: Clarify CREATE TABLESPACE documentation 2018-10-01 14:07:01 +02:00
create_transform.sgml Adjust hints and docs to suggest CREATE EXTENSION not CREATE LANGUAGE. 2018-04-27 13:42:03 -04:00
create_trigger.sgml Change PROCEDURE to FUNCTION in CREATE TRIGGER syntax 2018-08-22 14:44:49 +02:00
create_tsconfig.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_tsdictionary.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_tsparser.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_tstemplate.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
create_type.sgml doc: Clarify CREATE TYPE ENUM documentation 2018-11-20 09:37:02 +01:00
create_user.sgml Clarify documentation about PASSWORD in CREATE/ALTER ROLE 2018-11-23 09:10:24 +09:00
create_user_mapping.sgml docs: fix spacing around "if not exists" brackets 2018-03-29 21:25:39 -04:00
create_view.sgml Add RECURSIVE to documentation index 2018-08-09 16:19:32 -04:00
createdb.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
createuser.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
deallocate.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
declare.sgml doc: adjust DECLARE docs to mention FOR UPDATE behavior 2018-05-28 13:16:02 -04:00
delete.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
discard.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
do.sgml Adjust hints and docs to suggest CREATE EXTENSION not CREATE LANGUAGE. 2018-04-27 13:42:03 -04:00
drop_access_method.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_aggregate.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_cast.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_collation.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_conversion.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_database.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_domain.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_event_trigger.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_extension.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_foreign_data_wrapper.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_foreign_table.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_function.sgml SQL procedures 2017-11-30 11:03:20 -05:00
drop_group.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_index.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_language.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_materialized_view.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_opclass.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_operator.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_opfamily.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_owned.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_policy.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_procedure.sgml SQL procedures 2017-11-30 11:03:20 -05:00
drop_publication.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_role.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_routine.sgml SQL procedures 2017-11-30 11:03:20 -05:00
drop_rule.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_schema.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_sequence.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_server.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_statistics.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_subscription.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_table.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_tablespace.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_transform.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_trigger.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_tsconfig.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_tsdictionary.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_tsparser.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_tstemplate.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_type.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_user.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_user_mapping.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
drop_view.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
dropdb.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
dropuser.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
ecpg-ref.sgml ecpg: Document new compatibility option 2018-06-07 23:33:24 -04:00
end.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
execute.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
explain.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
fetch.sgml Doc: minor improvement in pl/pgsql FETCH/MOVE documentation. 2018-07-12 12:29:03 -04:00
grant.sgml Refactor documentation about privileges to centralize the info. 2018-12-03 11:40:49 -05:00
import_foreign_schema.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
initdb.sgml Clarify behavior of initdb's --allow-group-access on Windows in docs 2019-02-04 09:57:20 +09:00
insert.sgml Revert MERGE patch 2018-04-12 11:22:56 +01:00
listen.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
load.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
lock.sgml Add more infinite recursion detection while locking a view. 2018-04-17 16:59:17 +09:00
move.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
notify.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
pg_basebackup.sgml Improve wording about WAL files in tar mode of pg_basebackup 2019-01-29 10:42:41 +01:00
pg_config-ref.sgml Don't use SGML empty tags 2017-10-17 15:10:33 -04:00
pg_controldata.sgml Add long options to pg_resetwal and pg_controldata 2018-03-24 21:49:53 -04:00
pg_ctl-ref.sgml Implement "pg_ctl logrotate" command 2018-09-01 19:46:49 +03:00
pg_dump.sgml Fix typos in documentation and for one wait event 2019-01-15 08:47:01 +09:00
pg_dumpall.sgml Doc: warn against using parallel restore with --load-via-partition-root. 2018-09-23 18:34:18 -04:00
pg_isready.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
pg_receivewal.sgml Allow group access on PGDATA 2018-04-07 17:45:39 -04:00
pg_recvlogical.sgml Allow group access on PGDATA 2018-04-07 17:45:39 -04:00
pg_resetwal.sgml pg_resetwal: Allow users to change the WAL segment size 2018-03-25 14:58:49 -04:00
pg_restore.sgml Fix description and documentation related to pg_restore --no-comments 2018-06-26 14:57:53 +09:00
pg_rewind.sgml Integrate recovery.conf into postgresql.conf 2018-11-25 16:33:40 +01:00
pg_verify_checksums.sgml pg_verify_checksums: rename -d to --verbose 2018-08-30 06:35:55 -03:00
pg_waldump.sgml doc: Fix minor whitespace issue 2018-11-13 13:51:38 +01:00
pgarchivecleanup.sgml Integrate recovery.conf into postgresql.conf 2018-11-25 16:33:40 +01:00
pgbench.sgml Fix portability problem in pgbench. 2019-01-24 11:31:54 -05:00
pgtestfsync.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
pgtesttiming.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
pgupgrade.sgml Add a --socketdir option to pg_upgrade. 2018-12-01 15:45:11 -05:00
postgres-ref.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
postmaster.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
prepare.sgml docs: Only first instance of a PREPARE parameter sets data type 2018-08-09 10:13:15 -04:00
prepare_transaction.sgml Restrict the use of temporary namespace in two-phase transactions 2019-01-18 09:21:44 +09:00
psql-ref.sgml Fix psql's "\g target" meta-command to work with COPY TO STDOUT. 2019-01-26 14:15:42 -05:00
reassign_owned.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
refresh_materialized_view.sgml Mention ownership requirements for REFRESH MATERIALIZED VIEW in docs 2018-08-17 11:29:15 +09:00
reindex.sgml Restrict access to reindex of shared catalogs for non-privileged users 2018-08-09 09:40:15 +02:00
reindexdb.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
release_savepoint.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
reset.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
revoke.sgml Refactor documentation about privileges to centralize the info. 2018-12-03 11:40:49 -05:00
rollback.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
rollback_prepared.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
rollback_to.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
savepoint.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
security_label.sgml SQL procedures 2017-11-30 11:03:20 -05:00
select.sgml Allow user control of CTE materialization, and change the default behavior. 2019-02-16 16:11:12 -05:00
select_into.sgml Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
set.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
set_constraints.sgml Convert SGML IDs to lower case 2017-10-20 19:26:10 -04:00
set_role.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
set_session_auth.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
set_transaction.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
show.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
start_transaction.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
truncate.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
unlisten.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
update.sgml Allow insert and update tuple routing and COPY for foreign tables. 2018-04-06 19:22:03 -04:00
vacuum.sgml Add option SKIP_LOCKED to VACUUM and ANALYZE 2018-10-04 09:00:33 +09:00
vacuumdb.sgml Add --min-xid-age and --min-mxid-age options to vacuumdb 2019-01-31 13:07:56 +09:00
values.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00