mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
Avoid duplicates in ALTER ... DEPENDS ON EXTENSION
If the command is attempted for an extension that the object already depends on, silently do nothing. In particular, this means that if a database containing multiple such entries is dumped, the restore will silently do the right thing and record just the first one. (At least, in a world where pg_dump does dump such entries -- which it doesn't currently, but it will.) Backpatch to 9.6, where this kind of dependency was introduced. Reviewed-by: Ibrar Ahmed, Tom Lane (offlist) Discussion: https://postgr.es/m/20200217225333.GA30974@alvherre.pgsql
This commit is contained in:
@ -434,6 +434,7 @@ ExecAlterObjectDependsStmt(AlterObjectDependsStmt *stmt, ObjectAddress *refAddre
|
||||
ObjectAddress address;
|
||||
ObjectAddress refAddr;
|
||||
Relation rel;
|
||||
List *currexts;
|
||||
|
||||
address =
|
||||
get_object_address_rv(stmt->objectType, stmt->relation, (List *) stmt->object,
|
||||
@ -463,7 +464,11 @@ ExecAlterObjectDependsStmt(AlterObjectDependsStmt *stmt, ObjectAddress *refAddre
|
||||
if (refAddress)
|
||||
*refAddress = refAddr;
|
||||
|
||||
recordDependencyOn(&address, &refAddr, DEPENDENCY_AUTO_EXTENSION);
|
||||
/* Avoid duplicates */
|
||||
currexts = getAutoExtensionsOfObject(address.classId,
|
||||
address.objectId);
|
||||
if (!list_member_oid(currexts, refAddr.objectId))
|
||||
recordDependencyOn(&address, &refAddr, DEPENDENCY_AUTO_EXTENSION);
|
||||
|
||||
return address;
|
||||
}
|
||||
|
Reference in New Issue
Block a user