!319 Fixed syntax error when 'IF EXISTS' is used in 'ALTER POLICY [IF EXISTS] old_name ON table_a RENAME TO new_name'
Merge pull request !319 from Yuejia/master
This commit is contained in:
@ -10213,6 +10213,26 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
|
||||
n->missing_ok = false;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| ALTER POLICY IF_P EXISTS name ON qualified_name RENAME TO name
|
||||
{
|
||||
RenameStmt *n = makeNode(RenameStmt);
|
||||
n->renameType = OBJECT_RLSPOLICY;
|
||||
n->subname = $5;
|
||||
n->relation = $7;
|
||||
n->newname = $10;
|
||||
n->missing_ok = true;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| ALTER ROW LEVEL SECURITY POLICY IF_P EXISTS name ON qualified_name RENAME TO name
|
||||
{
|
||||
RenameStmt *n = makeNode(RenameStmt);
|
||||
n->renameType = OBJECT_RLSPOLICY;
|
||||
n->subname = $8;
|
||||
n->relation = $10;
|
||||
n->newname = $13;
|
||||
n->missing_ok = true;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| ALTER SCHEMA name RENAME TO name
|
||||
{
|
||||
RenameStmt *n = makeNode(RenameStmt);
|
||||
|
@ -513,19 +513,26 @@ void RenameRlsPolicy(RenameStmt* renameStmt)
|
||||
rlsPolicyTuple = systable_getnext(scanDesc);
|
||||
/* Policy does not exists */
|
||||
if (HeapTupleIsValid(rlsPolicyTuple) == false) {
|
||||
if (renameStmt->missing_ok) {
|
||||
ereport(NOTICE,
|
||||
(errmsg("row level security policy \"%s\" for relation \"%s\" does not exist, skipping",
|
||||
renameStmt->subname,
|
||||
renameStmt->relation->relname)));
|
||||
} else {
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("row level security policy \"%s\" for relation \"%s\" does not exists",
|
||||
errmsg("row level security policy \"%s\" for relation \"%s\" does not exist",
|
||||
renameStmt->subname,
|
||||
renameStmt->relation->relname)));
|
||||
}
|
||||
|
||||
} else {
|
||||
/* Copy tuple here, because of update index later */
|
||||
rlsPolicyTuple = heap_copytuple(rlsPolicyTuple);
|
||||
/* Update RLS policy name */
|
||||
(void)namestrcpy(&(((Form_pg_rlspolicy)GETSTRUCT(rlsPolicyTuple))->polname), renameStmt->newname);
|
||||
simple_heap_update(pg_rlspolicy, &rlsPolicyTuple->t_self, rlsPolicyTuple);
|
||||
CatalogUpdateIndexes(pg_rlspolicy, rlsPolicyTuple);
|
||||
}
|
||||
|
||||
/*
|
||||
* Invalidate relation's relcache entry so that other backends (and this
|
||||
|
@ -815,7 +815,11 @@ select * from pg_shdepend where classid = 3254 and refclassid = 1260 and refobji
|
||||
DROP USER regress_rls_bob;
|
||||
ALTER POLICY p01 ON document_row USING (dauthor = current_user);
|
||||
ALTER POLICY p01 ON document_row RENAME TO p12;
|
||||
ALTER POLICY IF EXISTS p01 on document_row RENAME to p13;
|
||||
NOTICE: row level security policy "p01" for relation "document_row" does not exist, skipping
|
||||
ALTER POLICY p12 ON document_row RENAME TO p13;
|
||||
ALTER ROW LEVEL SECURITY POLICY IF EXISTS p12 ON document_row RENAME TO p01;
|
||||
NOTICE: row level security policy "p12" for relation "document_row" does not exist, skipping
|
||||
ALTER POLICY p13 ON document_row RENAME TO p01;
|
||||
SELECT * FROM pg_rlspolicies ORDER BY tablename, policyname;
|
||||
schemaname | tablename | policyname | policypermissive | policyroles | policycmd | policyqual
|
||||
|
@ -331,7 +331,9 @@ select * from pg_shdepend where classid = 3254 and refclassid = 1260 and refobji
|
||||
DROP USER regress_rls_bob;
|
||||
ALTER POLICY p01 ON document_row USING (dauthor = current_user);
|
||||
ALTER POLICY p01 ON document_row RENAME TO p12;
|
||||
ALTER POLICY IF EXISTS p01 on document_row RENAME to p13;
|
||||
ALTER POLICY p12 ON document_row RENAME TO p13;
|
||||
ALTER ROW LEVEL SECURITY POLICY IF EXISTS p12 ON document_row RENAME TO p01;
|
||||
ALTER POLICY p13 ON document_row RENAME TO p01;
|
||||
SELECT * FROM pg_rlspolicies ORDER BY tablename, policyname;
|
||||
-- enable private object
|
||||
|
Reference in New Issue
Block a user