pgsql: Fix CREATE MATVIEW/CREATE TABLE AS ... WITH NO DATA to not plan

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix CREATE MATVIEW/CREATE TABLE AS ... WITH NO DATA to not plan
Дата
Msg-id E1bHcfR-00077y-Og@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix CREATE MATVIEW/CREATE TABLE AS ... WITH NO DATA to not plan the query.

Previously, these commands always planned the given query and went through
executor startup before deciding not to actually run the query if WITH NO
DATA is specified.  This behavior is problematic for pg_dump because it
may cause errors to be raised that we would rather not see before a
REFRESH MATERIALIZED VIEW command is issued.  See for example bug #13907
from Marian Krucina.  This change is not sufficient to fix that particular
bug, because we also need to tweak pg_dump to issue the REFRESH later,
but it's a necessary step on the way.

A user-visible side effect of doing things this way is that the returned
command tag for WITH NO DATA cases will now be "CREATE MATERIALIZED VIEW"
or "CREATE TABLE AS", not "SELECT 0".  We could preserve the old behavior
but it would take more code, and arguably that was just an implementation
artifact not intended behavior anyhow.

In 9.5 and HEAD, also get rid of the static variable CreateAsReladdr, which
was trouble waiting to happen; there is not any prohibition on nested
CREATE commands.

Back-patch to 9.3 where CREATE MATERIALIZED VIEW was introduced.

Michael Paquier and Tom Lane

Report: <20160202161407.2778.24659@wrigleys.postgresql.org>

Branch
------
REL9_4_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/dc9e03bf474a42c46cab1ec02456bcd43be45c58

Modified Files
--------------
src/backend/commands/createas.c           | 362 +++++++++++++++++++-----------
src/backend/commands/view.c               |  22 +-
src/backend/nodes/makefuncs.c             |  30 +++
src/include/nodes/makefuncs.h             |   3 +
src/test/regress/expected/matview.out     |  63 +++++-
src/test/regress/expected/select_into.out |  38 ++++
src/test/regress/sql/matview.sql          |  39 +++-
src/test/regress/sql/select_into.sql      |  19 ++
8 files changed, 404 insertions(+), 172 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Teodor Sigaev
Дата:
Сообщение: pgsql: Change predecence of phrase operator.
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix CREATE MATVIEW/CREATE TABLE AS ... WITH NO DATA to not plan