2002-07-12 20:43:19 +02:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
*
|
|
|
|
* pg_constraint.h
|
|
|
|
* definition of the system "constraint" relation (pg_constraint)
|
|
|
|
* along with the relation's initial contents.
|
|
|
|
*
|
|
|
|
*
|
2016-01-02 19:33:40 +01:00
|
|
|
* Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
|
2002-07-12 20:43:19 +02:00
|
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
|
|
*
|
2010-09-20 22:08:53 +02:00
|
|
|
* src/include/catalog/pg_constraint.h
|
2002-07-12 20:43:19 +02:00
|
|
|
*
|
|
|
|
* NOTES
|
2010-01-05 02:06:57 +01:00
|
|
|
* the genbki.pl script reads this file and generates .bki
|
2002-07-12 20:43:19 +02:00
|
|
|
* information from the DATA() statements.
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
#ifndef PG_CONSTRAINT_H
|
|
|
|
#define PG_CONSTRAINT_H
|
|
|
|
|
2008-03-27 04:57:34 +01:00
|
|
|
#include "catalog/genbki.h"
|
2006-06-29 00:11:01 +02:00
|
|
|
|
2002-07-12 20:43:19 +02:00
|
|
|
/* ----------------
|
|
|
|
* pg_constraint definition. cpp turns this into
|
|
|
|
* typedef struct FormData_pg_constraint
|
|
|
|
* ----------------
|
|
|
|
*/
|
2005-04-14 03:38:22 +02:00
|
|
|
#define ConstraintRelationId 2606
|
|
|
|
|
|
|
|
CATALOG(pg_constraint,2606)
|
2002-07-12 20:43:19 +02:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
* conname + connamespace is deliberately not unique; we allow, for
|
|
|
|
* example, the same name to be used for constraints of different
|
|
|
|
* relations. This is partly for backwards compatibility with past
|
2005-10-15 04:49:52 +02:00
|
|
|
* Postgres practice, and partly because we don't want to have to obtain a
|
|
|
|
* global lock to generate a globally unique name for a nameless
|
2014-05-06 18:12:18 +02:00
|
|
|
* constraint. We associate a namespace with constraint names only for
|
2010-01-17 23:56:23 +01:00
|
|
|
* SQL-spec compatibility.
|
2002-07-12 20:43:19 +02:00
|
|
|
*/
|
|
|
|
NameData conname; /* name of this constraint */
|
|
|
|
Oid connamespace; /* OID of namespace containing constraint */
|
|
|
|
char contype; /* constraint type; see codes below */
|
|
|
|
bool condeferrable; /* deferrable constraint? */
|
|
|
|
bool condeferred; /* deferred by default? */
|
2011-02-08 13:23:20 +01:00
|
|
|
bool convalidated; /* constraint has been validated? */
|
2002-07-12 20:43:19 +02:00
|
|
|
|
|
|
|
/*
|
2005-10-15 04:49:52 +02:00
|
|
|
* conrelid and conkey are only meaningful if the constraint applies to a
|
|
|
|
* specific relation (this excludes domain constraints and assertions).
|
|
|
|
* Otherwise conrelid is 0 and conkey is NULL.
|
2002-07-12 20:43:19 +02:00
|
|
|
*/
|
|
|
|
Oid conrelid; /* relation this constraint constrains */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* contypid links to the pg_type row for a domain if this is a domain
|
2014-05-06 18:12:18 +02:00
|
|
|
* constraint. Otherwise it's 0.
|
2002-07-12 20:43:19 +02:00
|
|
|
*
|
2005-11-22 19:17:34 +01:00
|
|
|
* For SQL-style global ASSERTIONs, both conrelid and contypid would be
|
|
|
|
* zero. This is not presently supported, however.
|
2002-07-12 20:43:19 +02:00
|
|
|
*/
|
|
|
|
Oid contypid; /* domain this constraint constrains */
|
|
|
|
|
2009-07-28 04:56:31 +02:00
|
|
|
/*
|
|
|
|
* conindid links to the index supporting the constraint, if any;
|
2010-03-11 04:36:22 +01:00
|
|
|
* otherwise it's 0. This is used for unique, primary-key, and exclusion
|
|
|
|
* constraints, and less obviously for foreign-key constraints (where the
|
|
|
|
* index is a unique index on the referenced relation's referenced
|
|
|
|
* columns). Notice that the index is on conrelid in the first case but
|
|
|
|
* confrelid in the second.
|
2009-07-28 04:56:31 +02:00
|
|
|
*/
|
|
|
|
Oid conindid; /* index supporting this constraint */
|
|
|
|
|
2002-07-12 20:43:19 +02:00
|
|
|
/*
|
|
|
|
* These fields, plus confkey, are only meaningful for a foreign-key
|
2014-05-06 18:12:18 +02:00
|
|
|
* constraint. Otherwise confrelid is 0 and the char fields are spaces.
|
2002-07-12 20:43:19 +02:00
|
|
|
*/
|
|
|
|
Oid confrelid; /* relation referenced by foreign key */
|
|
|
|
char confupdtype; /* foreign key's ON UPDATE action */
|
|
|
|
char confdeltype; /* foreign key's ON DELETE action */
|
|
|
|
char confmatchtype; /* foreign key's match type */
|
|
|
|
|
2008-05-10 01:32:05 +02:00
|
|
|
/* Has a local definition (hence, do not drop when coninhcount is 0) */
|
|
|
|
bool conislocal;
|
|
|
|
|
|
|
|
/* Number of times inherited from direct parent relation(s) */
|
2012-06-25 00:51:46 +02:00
|
|
|
int32 coninhcount;
|
2008-05-10 01:32:05 +02:00
|
|
|
|
2011-12-05 19:10:18 +01:00
|
|
|
/* Has a local definition and cannot be inherited */
|
2012-04-21 04:46:20 +02:00
|
|
|
bool connoinherit;
|
2011-12-05 19:10:18 +01:00
|
|
|
|
2012-01-27 19:16:17 +01:00
|
|
|
#ifdef CATALOG_VARLEN /* variable-length fields start here */
|
2012-06-10 21:20:04 +02:00
|
|
|
|
2002-07-12 20:43:19 +02:00
|
|
|
/*
|
2010-02-26 03:01:40 +01:00
|
|
|
* Columns of conrelid that the constraint applies to, if known (this is
|
|
|
|
* NULL for trigger constraints)
|
2002-07-12 20:43:19 +02:00
|
|
|
*/
|
2012-06-25 00:51:46 +02:00
|
|
|
int16 conkey[1];
|
2002-07-12 20:43:19 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* If a foreign key, the referenced columns of confrelid
|
|
|
|
*/
|
2012-06-25 00:51:46 +02:00
|
|
|
int16 confkey[1];
|
2002-07-12 20:43:19 +02:00
|
|
|
|
2007-02-14 02:58:58 +01:00
|
|
|
/*
|
|
|
|
* If a foreign key, the OIDs of the PK = FK equality operators for each
|
|
|
|
* column of the constraint
|
|
|
|
*/
|
|
|
|
Oid conpfeqop[1];
|
|
|
|
|
|
|
|
/*
|
|
|
|
* If a foreign key, the OIDs of the PK = PK equality operators for each
|
|
|
|
* column of the constraint (i.e., equality for the referenced columns)
|
|
|
|
*/
|
|
|
|
Oid conppeqop[1];
|
|
|
|
|
|
|
|
/*
|
|
|
|
* If a foreign key, the OIDs of the FK = FK equality operators for each
|
|
|
|
* column of the constraint (i.e., equality for the referencing columns)
|
|
|
|
*/
|
|
|
|
Oid conffeqop[1];
|
|
|
|
|
2009-12-07 06:22:23 +01:00
|
|
|
/*
|
|
|
|
* If an exclusion constraint, the OIDs of the exclusion operators for
|
|
|
|
* each column of the constraint
|
|
|
|
*/
|
|
|
|
Oid conexclop[1];
|
|
|
|
|
2002-07-12 20:43:19 +02:00
|
|
|
/*
|
|
|
|
* If a check constraint, nodeToString representation of expression
|
|
|
|
*/
|
2010-09-03 03:34:55 +02:00
|
|
|
pg_node_tree conbin;
|
2002-07-12 20:43:19 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* If a check constraint, source-text representation of expression
|
|
|
|
*/
|
|
|
|
text consrc;
|
2012-01-27 19:16:17 +01:00
|
|
|
#endif
|
2002-07-12 20:43:19 +02:00
|
|
|
} FormData_pg_constraint;
|
|
|
|
|
|
|
|
/* ----------------
|
|
|
|
* Form_pg_constraint corresponds to a pointer to a tuple with
|
|
|
|
* the format of pg_constraint relation.
|
|
|
|
* ----------------
|
|
|
|
*/
|
|
|
|
typedef FormData_pg_constraint *Form_pg_constraint;
|
|
|
|
|
|
|
|
/* ----------------
|
|
|
|
* compiler constants for pg_constraint
|
|
|
|
* ----------------
|
|
|
|
*/
|
2016-04-08 20:52:13 +02:00
|
|
|
#define Natts_pg_constraint 24
|
2002-07-12 20:43:19 +02:00
|
|
|
#define Anum_pg_constraint_conname 1
|
|
|
|
#define Anum_pg_constraint_connamespace 2
|
|
|
|
#define Anum_pg_constraint_contype 3
|
|
|
|
#define Anum_pg_constraint_condeferrable 4
|
|
|
|
#define Anum_pg_constraint_condeferred 5
|
2011-02-08 13:23:20 +01:00
|
|
|
#define Anum_pg_constraint_convalidated 6
|
|
|
|
#define Anum_pg_constraint_conrelid 7
|
|
|
|
#define Anum_pg_constraint_contypid 8
|
|
|
|
#define Anum_pg_constraint_conindid 9
|
|
|
|
#define Anum_pg_constraint_confrelid 10
|
|
|
|
#define Anum_pg_constraint_confupdtype 11
|
|
|
|
#define Anum_pg_constraint_confdeltype 12
|
|
|
|
#define Anum_pg_constraint_confmatchtype 13
|
|
|
|
#define Anum_pg_constraint_conislocal 14
|
|
|
|
#define Anum_pg_constraint_coninhcount 15
|
2012-04-21 04:46:20 +02:00
|
|
|
#define Anum_pg_constraint_connoinherit 16
|
2011-12-05 19:10:18 +01:00
|
|
|
#define Anum_pg_constraint_conkey 17
|
2016-04-08 20:52:13 +02:00
|
|
|
#define Anum_pg_constraint_confkey 18
|
|
|
|
#define Anum_pg_constraint_conpfeqop 19
|
|
|
|
#define Anum_pg_constraint_conppeqop 20
|
|
|
|
#define Anum_pg_constraint_conffeqop 21
|
|
|
|
#define Anum_pg_constraint_conexclop 22
|
|
|
|
#define Anum_pg_constraint_conbin 23
|
|
|
|
#define Anum_pg_constraint_consrc 24
|
2002-07-12 20:43:19 +02:00
|
|
|
|
2016-02-11 21:51:28 +01:00
|
|
|
/* ----------------
|
|
|
|
* initial contents of pg_constraint
|
|
|
|
* ----------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* nothing, at present */
|
|
|
|
|
2002-07-12 20:43:19 +02:00
|
|
|
|
|
|
|
/* Valid values for contype */
|
|
|
|
#define CONSTRAINT_CHECK 'c'
|
|
|
|
#define CONSTRAINT_FOREIGN 'f'
|
|
|
|
#define CONSTRAINT_PRIMARY 'p'
|
|
|
|
#define CONSTRAINT_UNIQUE 'u'
|
2010-01-17 23:56:23 +01:00
|
|
|
#define CONSTRAINT_TRIGGER 't'
|
2009-12-07 06:22:23 +01:00
|
|
|
#define CONSTRAINT_EXCLUSION 'x'
|
2002-07-12 20:43:19 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Valid values for confupdtype and confdeltype are the FKCONSTR_ACTION_xxx
|
|
|
|
* constants defined in parsenodes.h. Valid values for confmatchtype are
|
|
|
|
* the FKCONSTR_MATCH_xxx constants defined in parsenodes.h.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#endif /* PG_CONSTRAINT_H */
|