summaryrefslogtreecommitdiff
path: root/src/include/catalog/pg_shdepend.h
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-07-07 20:40:02 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-07-07 20:40:02 +0000
commit59d1b3d99e690734fa2a2bd0fae12b0cb1084294 (patch)
treeff074126ccc1a6342de38737d79e218f22fb9be4 /src/include/catalog/pg_shdepend.h
parent442b59dd8bc4b0efa1d733690f6ba9dae3f61b1f (diff)
downloadpostgresql-59d1b3d99e690734fa2a2bd0fae12b0cb1084294.tar.gz
Track dependencies on shared objects (which is to say, roles; we already
have adequate mechanisms for tracking the contents of databases and tablespaces). This solves the longstanding problem that you can drop a user who still owns objects and/or has access permissions. Alvaro Herrera, with some kibitzing from Tom Lane.
Diffstat (limited to 'src/include/catalog/pg_shdepend.h')
-rw-r--r--src/include/catalog/pg_shdepend.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/include/catalog/pg_shdepend.h b/src/include/catalog/pg_shdepend.h
new file mode 100644
index 0000000000..f3c905bd2f
--- /dev/null
+++ b/src/include/catalog/pg_shdepend.h
@@ -0,0 +1,91 @@
+/*-------------------------------------------------------------------------
+ *
+ * pg_shdepend.h
+ * definition of the system "shared dependency" relation (pg_shdepend)
+ * along with the relation's initial contents.
+ *
+ *
+ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * $PostgreSQL: pgsql/src/include/catalog/pg_shdepend.h,v 1.1 2005/07/07 20:39:59 tgl Exp $
+ *
+ * NOTES
+ * the genbki.sh script reads this file and generates .bki
+ * information from the DATA() statements.
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef PG_SHDEPEND_H
+#define PG_SHDEPEND_H
+
+/* ----------------
+ * postgres.h contains the system type definitions and the
+ * CATALOG(), BKI_BOOTSTRAP and DATA() sugar words so this file
+ * can be read by both genbki.sh and the C compiler.
+ * ----------------
+ */
+
+/* ----------------
+ * pg_shdepend definition. cpp turns this into
+ * typedef struct FormData_pg_shdepend
+ * ----------------
+ */
+#define SharedDependRelationId 1214
+CATALOG(pg_shdepend,1214) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
+{
+ /*
+ * Identification of the dependent (referencing) object.
+ *
+ * These fields are all zeroes for a DEPENDENCY_PIN entry. Also,
+ * dbid can be zero to denote a shared object.
+ */
+ Oid dbid; /* OID of database containing object */
+ Oid classid; /* OID of table containing object */
+ Oid objid; /* OID of object itself */
+
+ /*
+ * Identification of the independent (referenced) object. This is
+ * always a shared object, so we need no database ID field.
+ */
+ Oid refclassid; /* OID of table containing object */
+ Oid refobjid; /* OID of object itself */
+
+ /*
+ * Precise semantics of the relationship are specified by the deptype
+ * field. See SharedDependencyType in catalog/dependency.h.
+ */
+ char deptype; /* see codes in dependency.h */
+} FormData_pg_shdepend;
+
+/* ----------------
+ * Form_pg_shdepend corresponds to a pointer to a row with
+ * the format of pg_shdepend relation.
+ * ----------------
+ */
+typedef FormData_pg_shdepend *Form_pg_shdepend;
+
+/* ----------------
+ * compiler constants for pg_shdepend
+ * ----------------
+ */
+#define Natts_pg_shdepend 6
+#define Anum_pg_shdepend_dbid 1
+#define Anum_pg_shdepend_classid 2
+#define Anum_pg_shdepend_objid 3
+#define Anum_pg_shdepend_refclassid 4
+#define Anum_pg_shdepend_refobjid 5
+#define Anum_pg_shdepend_deptype 6
+
+
+/*
+ * pg_shdepend has no preloaded contents; system-defined dependencies are
+ * loaded into it during a late stage of the initdb process.
+ *
+ * NOTE: we do not represent all possible dependency pairs in pg_shdepend;
+ * for example, there's not much value in creating an explicit dependency
+ * from a relation to its database. Currently, only dependencies on roles
+ * are explicitly stored in pg_shdepend.
+ */
+
+#endif /* PG_SHDEPEND_H */