Re: dependencyLockAndCheckObject(): dependent vs referenced
Heikki Linnakangas <hlinnaka@iki.fi>
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Kyotaro Horiguchi <horikyota.ntt@gmail.com>,
pgsql-hackers@lists.postgresql.org
Date: 2026-05-28T18:40:52Z
Lists: pgsql-hackers
On 28/05/2026 05:46, Kyotaro Horiguchi wrote:
> Recently, the following error message was added in back branches 14-18:
>
> "dependent %s was concurrently dropped"
>
> As I understand it, this is emitted in
> dependencyLockAndCheckObject(Oid classId, Oid objectId) when the
> object identified by classId/objectId no longer exists at that point.
>
> However, looking at one of the callers:
>
>> void
>> recordMultipleDependencies(const ObjectAddress *depender,
>> const ObjectAddress *referenced,
>> int nreferenced,
>> DependencyType behavior)
>> {
>> ...
>> dependencyLockAndCheckObject(referenced->classId,
> referenced->objectId);
>
> and further up, the function comment says:
>
>> /*
>> * Record a dependency between 2 objects via their respective ObjectAddress.
>> * The first argument is the dependent object, the second the one it
>> * references.
>> *
>> * This simply creates an entry in pg_depend, without any other processing.
>> */
>> void
>> recordDependencyOn(const ObjectAddress *depender,
>> const ObjectAddress *referenced,
>> DependencyType behavior)
>> {
>> recordMultipleDependencies(depender, referenced, 1, behavior);
>> }
>
> Ignoring higher-level callers for the moment, if this comment is
> considered authoritative, then it seems that the object being checked
> here is the referenced object rather than the dependent one.
>
> If so, should the message perhaps say:
>
> "referenced %s was concurrently dropped"
>
> instead?
Yes, you're right. I mixed up the terminology, in my head "dependent"
was a synonym for "referenced", but it's not. "dependent" means the same
as "depender", which is a term we use in some other places.
I've changed the error message and comments to say "referenced". Thanks!
- Heikki