diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2022-08-12 12:05:50 +0200 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2022-08-12 12:05:50 +0200 |
commit | 92af9143f13df8c54362ebbd4397cb53f207ff2d (patch) | |
tree | 910a3a67d8aeb757872f24578c7052a9698fd09f /src/test | |
parent | e7a552f303c56788d52ca4e46490236845662734 (diff) | |
download | postgresql-92af9143f13df8c54362ebbd4397cb53f207ff2d.tar.gz postgresql-92af9143f13df8c54362ebbd4397cb53f207ff2d.zip |
Reject MERGE in CTEs and COPY
The grammar added for MERGE inadvertently made it accepted syntax in
places that were not prepared to deal with it -- namely COPY and inside
CTEs, but invoking these things with MERGE currently causes assertion
failures or weird misbehavior in non-assertion builds. Protect those
places by checking for it explicitly until somebody decides to implement
it.
Reported-by: Alexey Borzov <borz_off@cs.msu.su>
Discussion: https://postgr.es/m/17579-82482cd7b267b862@postgresql.org
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/regress/expected/merge.out | 14 | ||||
-rw-r--r-- | src/test/regress/sql/merge.sql | 10 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/test/regress/expected/merge.out b/src/test/regress/expected/merge.out index af670e28e7f..729ae2eb065 100644 --- a/src/test/regress/expected/merge.out +++ b/src/test/regress/expected/merge.out @@ -123,6 +123,20 @@ ON tid = tid WHEN MATCHED THEN DO NOTHING; ERROR: name "target" specified more than once DETAIL: The name is used both as MERGE target table and data source. +-- used in a CTE +WITH foo AS ( + MERGE INTO target USING source ON (true) + WHEN MATCHED THEN DELETE +) SELECT * FROM foo; +ERROR: MERGE not supported in WITH query +LINE 1: WITH foo AS ( + ^ +-- used in COPY +COPY ( + MERGE INTO target USING source ON (true) + WHEN MATCHED THEN DELETE +) TO stdout; +ERROR: MERGE not supported in COPY -- unsupported relation types -- view CREATE VIEW tv AS SELECT * FROM target; diff --git a/src/test/regress/sql/merge.sql b/src/test/regress/sql/merge.sql index afeb212f3c8..e0c450736bd 100644 --- a/src/test/regress/sql/merge.sql +++ b/src/test/regress/sql/merge.sql @@ -88,6 +88,16 @@ MERGE INTO target USING target ON tid = tid WHEN MATCHED THEN DO NOTHING; +-- used in a CTE +WITH foo AS ( + MERGE INTO target USING source ON (true) + WHEN MATCHED THEN DELETE +) SELECT * FROM foo; +-- used in COPY +COPY ( + MERGE INTO target USING source ON (true) + WHEN MATCHED THEN DELETE +) TO stdout; -- unsupported relation types -- view |