citus/src/include/distributed/pg_dist_partition.h

73 lines
2.4 KiB
C

/*-------------------------------------------------------------------------
*
* pg_dist_partition.h
* definition of the system "remote partition" relation (pg_dist_partition).
*
* This table keeps metadata on logical tables that the user requested remote
* partitioning for (smaller physical tables that we partition data to are
* handled in another system catalog).
*
* Copyright (c) Citus Data, Inc.
*
*-------------------------------------------------------------------------
*/
#ifndef PG_DIST_PARTITION_H
#define PG_DIST_PARTITION_H
/* ----------------
* pg_dist_partition definition.
* ----------------
*/
typedef struct FormData_pg_dist_partition
{
Oid logicalrelid; /* logical relation id; references pg_class oid */
char partmethod; /* partition method; see codes below */
#ifdef CATALOG_VARLEN /* variable-length fields start here */
text partkey; /* partition key expression */
uint32 colocationid; /* id of the co-location group of particular table belongs to */
char repmodel; /* replication model; see codes below */
#endif
bool autoconverted;
} FormData_pg_dist_partition;
/* ----------------
* Form_pg_dist_partitions corresponds to a pointer to a tuple with
* the format of pg_dist_partitions relation.
* ----------------
*/
typedef FormData_pg_dist_partition *Form_pg_dist_partition;
/* ----------------
* compiler constants for pg_dist_partitions
* ----------------
*/
#define Natts_pg_dist_partition 6
#define Anum_pg_dist_partition_logicalrelid 1
#define Anum_pg_dist_partition_partmethod 2
#define Anum_pg_dist_partition_partkey 3
#define Anum_pg_dist_partition_colocationid 4
#define Anum_pg_dist_partition_repmodel 5
#define Anum_pg_dist_partition_autoconverted 6
/* valid values for partmethod include append, hash, and range */
#define DISTRIBUTE_BY_APPEND 'a'
#define DISTRIBUTE_BY_HASH 'h'
#define DISTRIBUTE_BY_RANGE 'r'
#define DISTRIBUTE_BY_NONE 'n'
#define REDISTRIBUTE_BY_HASH 'x'
#define DISTRIBUTE_BY_INVALID '\0'
/*
* Valid values for repmodel are 'c' for coordinator, 's' for streaming
* and 't' for two-phase-commit. We also use an invalid replication model
* ('i') for distinguishing uninitialized variables where necessary.
*/
#define REPLICATION_MODEL_COORDINATOR 'c'
#define REPLICATION_MODEL_STREAMING 's'
#define REPLICATION_MODEL_2PC 't'
#define REPLICATION_MODEL_INVALID 'i'
#endif /* PG_DIST_PARTITION_H */