1 /*-------------------------------------------------------------------------
4 * definition of the "collation" system catalog (pg_collation)
7 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
10 * src/include/catalog/pg_collation.h
13 * The Catalog.pm module reads this file and derives schema
16 *-------------------------------------------------------------------------
18 #ifndef PG_COLLATION_H
19 #define PG_COLLATION_H
21 #include "catalog/genbki.h"
22 #include "catalog/pg_collation_d.h" /* IWYU pragma: export */
25 * pg_collation definition. cpp turns this into
26 * typedef struct FormData_pg_collation
29 CATALOG(pg_collation
,3456,CollationRelationId
)
32 NameData collname
; /* collation name */
34 /* OID of namespace containing this collation */
35 Oid collnamespace
BKI_DEFAULT(pg_catalog
) BKI_LOOKUP(pg_namespace
);
37 /* owner of collation */
38 Oid collowner
BKI_DEFAULT(POSTGRES
) BKI_LOOKUP(pg_authid
);
39 char collprovider
; /* see constants below */
40 bool collisdeterministic
BKI_DEFAULT(t
);
41 int32 collencoding
; /* encoding for this collation; -1 = "all" */
42 #ifdef CATALOG_VARLEN /* variable-length fields start here */
43 text collcollate
BKI_DEFAULT(_null_
); /* LC_COLLATE setting */
44 text collctype
BKI_DEFAULT(_null_
); /* LC_CTYPE setting */
45 text colllocale
BKI_DEFAULT(_null_
); /* locale ID */
46 text collicurules
BKI_DEFAULT(_null_
); /* ICU collation rules */
47 text collversion
BKI_DEFAULT(_null_
); /* provider-dependent
48 * version of collation
51 } FormData_pg_collation
;
54 * Form_pg_collation corresponds to a pointer to a row with
55 * the format of pg_collation relation.
58 typedef FormData_pg_collation
*Form_pg_collation
;
60 DECLARE_TOAST(pg_collation
, 6175, 6176);
62 DECLARE_UNIQUE_INDEX(pg_collation_name_enc_nsp_index
, 3164, CollationNameEncNspIndexId
, pg_collation
, btree(collname name_ops
, collencoding int4_ops
, collnamespace oid_ops
));
63 DECLARE_UNIQUE_INDEX_PKEY(pg_collation_oid_index
, 3085, CollationOidIndexId
, pg_collation
, btree(oid oid_ops
));
65 MAKE_SYSCACHE(COLLNAMEENCNSP
, pg_collation_name_enc_nsp_index
, 8);
66 MAKE_SYSCACHE(COLLOID
, pg_collation_oid_index
, 8);
68 #ifdef EXPOSE_TO_CLIENT_CODE
70 #define COLLPROVIDER_DEFAULT 'd'
71 #define COLLPROVIDER_BUILTIN 'b'
72 #define COLLPROVIDER_ICU 'i'
73 #define COLLPROVIDER_LIBC 'c'
75 static inline const char *
76 collprovider_name(char c
)
80 case COLLPROVIDER_BUILTIN
:
82 case COLLPROVIDER_ICU
:
84 case COLLPROVIDER_LIBC
:
91 #endif /* EXPOSE_TO_CLIENT_CODE */
94 extern Oid
CollationCreate(const char *collname
, Oid collnamespace
,
97 bool collisdeterministic
,
99 const char *collcollate
, const char *collctype
,
100 const char *colllocale
,
101 const char *collicurules
,
102 const char *collversion
,
106 #endif /* PG_COLLATION_H */