PostgreSQL Source Code git master
sequence.c
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * sequence.c
4 * Generic routines for sequence-related code.
5 *
6 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 *
10 * IDENTIFICATION
11 * src/backend/access/sequence/sequence.c
12 *
13 *
14 * NOTES
15 * This file contains sequence_ routines that implement access to sequences
16 * (in contrast to other relation types like indexes).
17 *
18 *-------------------------------------------------------------------------
19 */
20
21#include "postgres.h"
22
23#include "access/relation.h"
24#include "access/sequence.h"
25#include "utils/rel.h"
26
27static inline void validate_relation_kind(Relation r);
28
29/* ----------------
30 * sequence_open - open a sequence relation by relation OID
31 *
32 * This is essentially relation_open plus check that the relation
33 * is a sequence.
34 * ----------------
35 */
37sequence_open(Oid relationId, LOCKMODE lockmode)
38{
39 Relation r;
40
41 r = relation_open(relationId, lockmode);
42
44
45 return r;
46}
47
48/* ----------------
49 * sequence_close - close a sequence
50 *
51 * If lockmode is not "NoLock", we then release the specified lock.
52 *
53 * Note that it is often sensible to hold a lock beyond relation_close;
54 * in that case, the lock is released automatically at xact end.
55 * ----------------
56 */
57void
58sequence_close(Relation relation, LOCKMODE lockmode)
59{
60 relation_close(relation, lockmode);
61}
62
63/* ----------------
64 * validate_relation_kind - check the relation's kind
65 *
66 * Make sure relkind is from a sequence.
67 * ----------------
68 */
69static inline void
71{
72 if (r->rd_rel->relkind != RELKIND_SEQUENCE)
74 (errcode(ERRCODE_WRONG_OBJECT_TYPE),
75 errmsg("cannot open relation \"%s\"",
78}
static void validate_relation_kind(Relation r)
Definition: sequence.c:70
Relation sequence_open(Oid relationId, LOCKMODE lockmode)
Definition: sequence.c:37
void sequence_close(Relation relation, LOCKMODE lockmode)
Definition: sequence.c:58
int errcode(int sqlerrcode)
Definition: elog.c:853
int errmsg(const char *fmt,...)
Definition: elog.c:1070
#define ERROR
Definition: elog.h:39
#define ereport(elevel,...)
Definition: elog.h:149
int LOCKMODE
Definition: lockdefs.h:26
int errdetail_relkind_not_supported(char relkind)
Definition: pg_class.c:24
unsigned int Oid
Definition: postgres_ext.h:32
#define RelationGetRelationName(relation)
Definition: rel.h:546
void relation_close(Relation relation, LOCKMODE lockmode)
Definition: relation.c:205
Relation relation_open(Oid relationId, LOCKMODE lockmode)
Definition: relation.c:47
Form_pg_class rd_rel
Definition: rel.h:111