Hi, Currently, for CTAS or CREATE MATERIALIZED VIEW(CMV) without if-not-exists clause, the existence of the relation gets checked during the execution of the select part and an error is thrown there. All the unnecessary rewrite and planning for the select part would have happened just to fail later. However, if if-not-exists clause is present, then a notice is issued and returned immediately without any further rewrite or planning for . This seems somewhat inconsistent to me.
I propose to check the relation existence early in ExecCreateTableAs() as well as in ExplainOneUtility() and throw an error in case it exists already to avoid unnecessary rewrite, planning and execution of the select part. Attaching a patch. Note that I have not added any test cases as the existing test cases in create_table.sql and matview.sql would cover the code. Thoughts? With Regards, Bharath Rupireddy. EnterpriseDB: http://www.enterprisedb.com
v1-0001-Fail-Fast-In-CTAS-CMV-If-Relation-Already-Exists.patch
Description: Binary data