On 08.02.22 13:55, Julien Rouhaud wrote:
I'm just saying that without such a lock you can easily trigger the "cache
lookup" error, and that's something that's supposed to happen with normal
usage I think. So it should be a better message saying that the database has
been concurrently dropped, or actually simply does not exist like it's done in
AlterDatabaseOwner() for the same pattern:
[...]
tuple = systable_getnext(scan);
if (!HeapTupleIsValid(tuple))
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_DATABASE),
errmsg("database \"%s\" does not exist",
dbname)));
[...]
In my code, the existence of the database is checked by
dboid = get_database_oid(stmt->dbname, false);
This also issues an appropriate user-facing error message if the
database does not exist.
The flow in AlterDatabaseOwner() is a bit different, it looks up the
pg_database tuple directly from the name. I think both are correct. My
code has been copied from the analogous code in AlterCollation().