33 #include "catalog/pg_am_d.h" 66 #define Atnum_ismulti 2 96 elog(
ERROR,
"return type must be a row type");
105 if (rel->
rd_rel->relam != HEAP_TABLE_AM_OID)
107 errmsg(
"only heap AM is supported")));
109 if (rel->
rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
111 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
112 errmsg(
"\"%s\" is a partitioned table",
114 errdetail(
"Partitioned tables do not contain rows.")));
115 else if (rel->
rd_rel->relkind != RELKIND_RELATION)
117 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
118 errmsg(
"\"%s\" is not a table",
136 mydata =
palloc(
sizeof(*mydata));
196 values[
Atnum_modes] =
"{transient upgrade status}";
211 for (j = 0; j < nmembers; j++)
217 strcat(values[Atnum_xids],
",");
218 strcat(values[Atnum_modes],
",");
219 strcat(values[Atnum_pids],
",");
222 strcat(values[Atnum_xids], buf);
223 switch (members[j].
status)
244 strcat(values[Atnum_modes], buf);
247 strcat(values[Atnum_pids], buf);
252 strcat(values[Atnum_xids],
"}");
253 strcat(values[Atnum_modes],
"}");
254 strcat(values[Atnum_pids],
"}");
281 "{transient upgrade status}");
#define BUFFER_LOCK_UNLOCK
PG_FUNCTION_INFO_V1(pgrowlocks)
TypeFuncClass get_call_result_type(FunctionCallInfo fcinfo, Oid *resultTypeId, TupleDesc *resultTupleDesc)
void table_close(Relation relation, LOCKMODE lockmode)
#define HEAP_XMAX_LOCK_ONLY
#define SRF_IS_FIRSTCALL()
#define PointerGetDatum(X)
char * pstrdup(const char *in)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
Snapshot GetActiveSnapshot(void)
#define HEAP_LOCKED_UPGRADED(infomask)
int errcode(int sqlerrcode)
Datum pgrowlocks(PG_FUNCTION_ARGS)
RangeVar * makeRangeVarFromNameList(List *names)
#define DirectFunctionCall1(func, arg1)
TM_Result HeapTupleSatisfiesUpdate(HeapTuple htup, CommandId curcid, Buffer buffer)
#define SRF_PERCALL_SETUP()
struct HeapScanDescData * HeapScanDesc
HeapTuple BuildTupleFromCStrings(AttInMetadata *attinmeta, char **values)
#define PG_GETARG_TEXT_PP(n)
#define HEAP_XMAX_IS_SHR_LOCKED(infomask)
#define SRF_RETURN_NEXT(_funcctx, _result)
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
#define HeapTupleHeaderGetRawXmax(tup)
static TableScanDesc table_beginscan(Relation rel, Snapshot snapshot, int nkeys, struct ScanKeyData *key)
HeapTuple heap_getnext(TableScanDesc sscan, ScanDirection direction)
AttInMetadata * attinmeta
int errdetail(const char *fmt,...)
#define RelationGetRelationName(relation)
#define ereport(elevel, rest)
List * textToQualifiedNameList(text *textval)
int BackendXidGetPid(TransactionId xid)
AttInMetadata * TupleDescGetAttInMetadata(TupleDesc tupdesc)
void LockBuffer(Buffer buffer, int mode)
Relation relation_openrv(const RangeVar *relation, LOCKMODE lockmode)
#define HEAP_KEYS_UPDATED
#define HEAP_XMAX_IS_MULTI
bool is_member_of_role(Oid member, Oid role)
MemoryContext multi_call_memory_ctx
#define HeapTupleGetDatum(tuple)
AclResult pg_class_aclcheck(Oid table_oid, Oid roleid, AclMode mode)
static void table_endscan(TableScanDesc scan)
static Datum values[MAXATTR]
int errmsg(const char *fmt,...)
ObjectType get_relkind_objtype(char relkind)
#define BUFFER_LOCK_SHARE
#define HEAP_XMAX_IS_EXCL_LOCKED(infomask)
CommandId GetCurrentCommandId(bool used)
int GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, bool from_pgupgrade, bool onlyLock)
#define HEAP_XMAX_IS_KEYSHR_LOCKED(infomask)
static void static void status(const char *fmt,...) pg_attribute_printf(1
Datum tidout(PG_FUNCTION_ARGS)
#define RelationGetRelid(relation)
#define SRF_RETURN_DONE(_funcctx)
#define SRF_FIRSTCALL_INIT()