mirror of https://github.com/citusdata/citus.git
Fix dropping temporary view without specifying the explicit schema name (#6003)
parent
fb2dea3fc6
commit
e244e9ffb6
|
@ -439,7 +439,8 @@ AlterViewOwnerCommand(Oid viewOid)
|
||||||
bool
|
bool
|
||||||
IsViewDistributed(Oid viewOid)
|
IsViewDistributed(Oid viewOid)
|
||||||
{
|
{
|
||||||
Assert(get_rel_relkind(viewOid) == RELKIND_VIEW);
|
Assert(get_rel_relkind(viewOid) == RELKIND_VIEW ||
|
||||||
|
get_rel_relkind(viewOid) == RELKIND_MATVIEW);
|
||||||
|
|
||||||
ObjectAddress viewAddress = { 0 };
|
ObjectAddress viewAddress = { 0 };
|
||||||
ObjectAddressSet(viewAddress, RelationRelationId, viewOid);
|
ObjectAddressSet(viewAddress, RelationRelationId, viewOid);
|
||||||
|
|
|
@ -34,22 +34,31 @@ QualifyDropViewStmt(Node *node)
|
||||||
{
|
{
|
||||||
char *viewName = NULL;
|
char *viewName = NULL;
|
||||||
char *schemaName = NULL;
|
char *schemaName = NULL;
|
||||||
|
List *viewNameToAdd = possiblyQualifiedViewName;
|
||||||
DeconstructQualifiedName(possiblyQualifiedViewName, &schemaName, &viewName);
|
DeconstructQualifiedName(possiblyQualifiedViewName, &schemaName, &viewName);
|
||||||
|
|
||||||
if (schemaName == NULL)
|
if (schemaName == NULL)
|
||||||
{
|
{
|
||||||
char *objname = NULL;
|
RangeVar *viewRangeVar = makeRangeVarFromNameList(possiblyQualifiedViewName);
|
||||||
Oid schemaOid = QualifiedNameGetCreationNamespace(possiblyQualifiedViewName,
|
Oid viewOid = RangeVarGetRelid(viewRangeVar, AccessExclusiveLock,
|
||||||
&objname);
|
stmt->missing_ok);
|
||||||
schemaName = get_namespace_name(schemaOid);
|
|
||||||
List *qualifiedViewName = list_make2(makeString(schemaName),
|
/*
|
||||||
makeString(viewName));
|
* If DROP VIEW IF EXISTS called and the view doesn't exist, oid can be invalid.
|
||||||
qualifiedViewNames = lappend(qualifiedViewNames, qualifiedViewName);
|
* Do not try to qualify it.
|
||||||
}
|
*/
|
||||||
else
|
if (OidIsValid(viewOid))
|
||||||
{
|
{
|
||||||
qualifiedViewNames = lappend(qualifiedViewNames, possiblyQualifiedViewName);
|
Oid schemaOid = get_rel_namespace(viewOid);
|
||||||
|
schemaName = get_namespace_name(schemaOid);
|
||||||
|
|
||||||
|
List *qualifiedViewName = list_make2(makeString(schemaName),
|
||||||
|
makeString(viewName));
|
||||||
|
viewNameToAdd = qualifiedViewName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qualifiedViewNames = lappend(qualifiedViewNames, viewNameToAdd);
|
||||||
}
|
}
|
||||||
|
|
||||||
stmt->objects = qualifiedViewNames;
|
stmt->objects = qualifiedViewNames;
|
||||||
|
|
|
@ -792,6 +792,33 @@ SELECT run_command_on_workers($$SELECT count(*) FROM v_test_2$$);
|
||||||
(localhost,57638,f,"ERROR: relation ""v_test_2"" does not exist")
|
(localhost,57638,f,"ERROR: relation ""v_test_2"" does not exist")
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
|
-- create and drop temporary view
|
||||||
|
CREATE TEMPORARY VIEW temp_view_to_drop AS SELECT 1;
|
||||||
|
WARNING: "view temp_view_to_drop" has dependency on unsupported object "schema pg_temp_xxx"
|
||||||
|
DETAIL: "view temp_view_to_drop" will be created only locally
|
||||||
|
DROP VIEW temp_view_to_drop;
|
||||||
|
-- drop non-existent view
|
||||||
|
DROP VIEW IF EXISTS drop_the_nonexistent_view;
|
||||||
|
NOTICE: view "drop_the_nonexistent_view" does not exist, skipping
|
||||||
|
DROP VIEW IF EXISTS non_exist_view_schema.view_to_drop;
|
||||||
|
NOTICE: schema "non_exist_view_schema" does not exist, skipping
|
||||||
|
-- Check materialized view just for sanity
|
||||||
|
CREATE MATERIALIZED VIEW materialized_view_to_test AS SELECT 1;
|
||||||
|
DROP VIEW materialized_view_to_test;
|
||||||
|
ERROR: "materialized_view_to_test" is not a view
|
||||||
|
HINT: Use DROP MATERIALIZED VIEW to remove a materialized view.
|
||||||
|
DROP MATERIALIZED VIEW materialized_view_to_test;
|
||||||
|
CREATE SCHEMA axx;
|
||||||
|
create materialized view axx.temp_view_to_drop AS SELECT 1;
|
||||||
|
DROP VIEW axx.temp_view_to_drop;
|
||||||
|
ERROR: "temp_view_to_drop" is not a view
|
||||||
|
HINT: Use DROP MATERIALIZED VIEW to remove a materialized view.
|
||||||
|
DROP VIEW IF EXISTS axx.temp_view_to_drop;
|
||||||
|
ERROR: "temp_view_to_drop" is not a view
|
||||||
|
HINT: Use DROP MATERIALIZED VIEW to remove a materialized view.
|
||||||
|
DROP MATERIALIZED VIEW IF EXISTS axx.temp_view_to_drop;
|
||||||
|
DROP MATERIALIZED VIEW IF EXISTS axx.temp_view_to_drop;
|
||||||
|
NOTICE: materialized view "temp_view_to_drop" does not exist, skipping
|
||||||
SET client_min_messages TO ERROR;
|
SET client_min_messages TO ERROR;
|
||||||
DROP SCHEMA view_prop_schema_inner CASCADE;
|
DROP SCHEMA view_prop_schema_inner CASCADE;
|
||||||
DROP SCHEMA view_prop_schema CASCADE;
|
DROP SCHEMA view_prop_schema, axx CASCADE;
|
||||||
|
|
|
@ -442,6 +442,26 @@ SELECT create_distributed_table('employees','employee_id');
|
||||||
SELECT run_command_on_workers($$SELECT count(*) FROM v_test_1$$);
|
SELECT run_command_on_workers($$SELECT count(*) FROM v_test_1$$);
|
||||||
SELECT run_command_on_workers($$SELECT count(*) FROM v_test_2$$);
|
SELECT run_command_on_workers($$SELECT count(*) FROM v_test_2$$);
|
||||||
|
|
||||||
|
-- create and drop temporary view
|
||||||
|
CREATE TEMPORARY VIEW temp_view_to_drop AS SELECT 1;
|
||||||
|
DROP VIEW temp_view_to_drop;
|
||||||
|
|
||||||
|
-- drop non-existent view
|
||||||
|
DROP VIEW IF EXISTS drop_the_nonexistent_view;
|
||||||
|
DROP VIEW IF EXISTS non_exist_view_schema.view_to_drop;
|
||||||
|
|
||||||
|
-- Check materialized view just for sanity
|
||||||
|
CREATE MATERIALIZED VIEW materialized_view_to_test AS SELECT 1;
|
||||||
|
DROP VIEW materialized_view_to_test;
|
||||||
|
DROP MATERIALIZED VIEW materialized_view_to_test;
|
||||||
|
|
||||||
|
CREATE SCHEMA axx;
|
||||||
|
create materialized view axx.temp_view_to_drop AS SELECT 1;
|
||||||
|
DROP VIEW axx.temp_view_to_drop;
|
||||||
|
DROP VIEW IF EXISTS axx.temp_view_to_drop;
|
||||||
|
DROP MATERIALIZED VIEW IF EXISTS axx.temp_view_to_drop;
|
||||||
|
DROP MATERIALIZED VIEW IF EXISTS axx.temp_view_to_drop;
|
||||||
|
|
||||||
SET client_min_messages TO ERROR;
|
SET client_min_messages TO ERROR;
|
||||||
DROP SCHEMA view_prop_schema_inner CASCADE;
|
DROP SCHEMA view_prop_schema_inner CASCADE;
|
||||||
DROP SCHEMA view_prop_schema CASCADE;
|
DROP SCHEMA view_prop_schema, axx CASCADE;
|
||||||
|
|
Loading…
Reference in New Issue