mirror of
https://github.com/postgres/postgres.git
synced 2025-11-24 00:23:06 +03:00
Add pg_depend.refobjversion.
Provide a place for the version of referenced database objects to be recorded. A follow-up commit will use this to record dependencies on collation versions for indexes, but similar ideas for other kinds of objects have also been mooted. Author: Thomas Munro <thomas.munro@gmail.com> Reviewed-by: Julien Rouhaud <rjuju123@gmail.com> Reviewed-by: Peter Eisentraut <peter.eisentraut@2ndquadrant.com> Discussion: https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
#include "catalog/pg_extension.h"
|
||||
#include "commands/extension.h"
|
||||
#include "miscadmin.h"
|
||||
#include "utils/builtins.h"
|
||||
#include "utils/fmgroids.h"
|
||||
#include "utils/lsyscache.h"
|
||||
#include "utils/rel.h"
|
||||
@@ -44,7 +45,7 @@ recordDependencyOn(const ObjectAddress *depender,
|
||||
const ObjectAddress *referenced,
|
||||
DependencyType behavior)
|
||||
{
|
||||
recordMultipleDependencies(depender, referenced, 1, behavior);
|
||||
recordMultipleDependencies(depender, referenced, 1, NULL, behavior);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -55,6 +56,7 @@ void
|
||||
recordMultipleDependencies(const ObjectAddress *depender,
|
||||
const ObjectAddress *referenced,
|
||||
int nreferenced,
|
||||
const char *version,
|
||||
DependencyType behavior)
|
||||
{
|
||||
Relation dependDesc;
|
||||
@@ -115,6 +117,9 @@ recordMultipleDependencies(const ObjectAddress *depender,
|
||||
* Record the dependency. Note we don't bother to check for duplicate
|
||||
* dependencies; there's no harm in them.
|
||||
*/
|
||||
memset(slot[slot_stored_count]->tts_isnull, false,
|
||||
slot[slot_stored_count]->tts_tupleDescriptor->natts * sizeof(bool));
|
||||
|
||||
slot[slot_stored_count]->tts_values[Anum_pg_depend_refclassid - 1] = ObjectIdGetDatum(referenced->classId);
|
||||
slot[slot_stored_count]->tts_values[Anum_pg_depend_refobjid - 1] = ObjectIdGetDatum(referenced->objectId);
|
||||
slot[slot_stored_count]->tts_values[Anum_pg_depend_refobjsubid - 1] = Int32GetDatum(referenced->objectSubId);
|
||||
@@ -122,9 +127,10 @@ recordMultipleDependencies(const ObjectAddress *depender,
|
||||
slot[slot_stored_count]->tts_values[Anum_pg_depend_classid - 1] = ObjectIdGetDatum(depender->classId);
|
||||
slot[slot_stored_count]->tts_values[Anum_pg_depend_objid - 1] = ObjectIdGetDatum(depender->objectId);
|
||||
slot[slot_stored_count]->tts_values[Anum_pg_depend_objsubid - 1] = Int32GetDatum(depender->objectSubId);
|
||||
|
||||
memset(slot[slot_stored_count]->tts_isnull, false,
|
||||
slot[slot_stored_count]->tts_tupleDescriptor->natts * sizeof(bool));
|
||||
if (version)
|
||||
slot[slot_stored_count]->tts_values[Anum_pg_depend_refobjversion - 1] = CStringGetTextDatum(version);
|
||||
else
|
||||
slot[slot_stored_count]->tts_isnull[Anum_pg_depend_refobjversion - 1] = true;
|
||||
|
||||
ExecStoreVirtualTuple(slot[slot_stored_count]);
|
||||
slot_stored_count++;
|
||||
|
||||
Reference in New Issue
Block a user