| 1 | /*------------------------------------------------------------------------- |
| 2 | * |
| 3 | * pg_publication.h |
| 4 | * definition of the "publication" system catalog (pg_publication) |
| 5 | * |
| 6 | * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group |
| 7 | * Portions Copyright (c) 1994, Regents of the University of California |
| 8 | * |
| 9 | * src/include/catalog/pg_publication.h |
| 10 | * |
| 11 | * NOTES |
| 12 | * The Catalog.pm module reads this file and derives schema |
| 13 | * information. |
| 14 | * |
| 15 | *------------------------------------------------------------------------- |
| 16 | */ |
| 17 | #ifndef PG_PUBLICATION_H |
| 18 | #define PG_PUBLICATION_H |
| 19 | |
| 20 | #include "catalog/genbki.h" |
| 21 | #include "catalog/pg_publication_d.h" |
| 22 | |
| 23 | #include "catalog/objectaddress.h" |
| 24 | |
| 25 | /* ---------------- |
| 26 | * pg_publication definition. cpp turns this into |
| 27 | * typedef struct FormData_pg_publication |
| 28 | * ---------------- |
| 29 | */ |
| 30 | CATALOG(pg_publication,6104,PublicationRelationId) |
| 31 | { |
| 32 | Oid oid; /* oid */ |
| 33 | |
| 34 | NameData pubname; /* name of the publication */ |
| 35 | |
| 36 | Oid pubowner; /* publication owner */ |
| 37 | |
| 38 | /* |
| 39 | * indicates that this is special publication which should encompass all |
| 40 | * tables in the database (except for the unlogged and temp ones) |
| 41 | */ |
| 42 | bool puballtables; |
| 43 | |
| 44 | /* true if inserts are published */ |
| 45 | bool pubinsert; |
| 46 | |
| 47 | /* true if updates are published */ |
| 48 | bool pubupdate; |
| 49 | |
| 50 | /* true if deletes are published */ |
| 51 | bool pubdelete; |
| 52 | |
| 53 | /* true if truncates are published */ |
| 54 | bool pubtruncate; |
| 55 | |
| 56 | } FormData_pg_publication; |
| 57 | |
| 58 | /* ---------------- |
| 59 | * Form_pg_publication corresponds to a pointer to a tuple with |
| 60 | * the format of pg_publication relation. |
| 61 | * ---------------- |
| 62 | */ |
| 63 | typedef FormData_pg_publication *Form_pg_publication; |
| 64 | |
| 65 | typedef struct PublicationActions |
| 66 | { |
| 67 | bool pubinsert; |
| 68 | bool pubupdate; |
| 69 | bool pubdelete; |
| 70 | bool pubtruncate; |
| 71 | } PublicationActions; |
| 72 | |
| 73 | typedef struct Publication |
| 74 | { |
| 75 | Oid oid; |
| 76 | char *name; |
| 77 | bool alltables; |
| 78 | PublicationActions pubactions; |
| 79 | } Publication; |
| 80 | |
| 81 | extern Publication *GetPublication(Oid pubid); |
| 82 | extern Publication *GetPublicationByName(const char *pubname, bool missing_ok); |
| 83 | extern List *GetRelationPublications(Oid relid); |
| 84 | extern List *GetPublicationRelations(Oid pubid); |
| 85 | extern List *GetAllTablesPublications(void); |
| 86 | extern List *GetAllTablesPublicationRelations(void); |
| 87 | |
| 88 | extern bool is_publishable_relation(Relation rel); |
| 89 | extern ObjectAddress publication_add_relation(Oid pubid, Relation targetrel, |
| 90 | bool if_not_exists); |
| 91 | |
| 92 | extern Oid get_publication_oid(const char *pubname, bool missing_ok); |
| 93 | extern char *get_publication_name(Oid pubid, bool missing_ok); |
| 94 | |
| 95 | extern Datum pg_get_publication_tables(PG_FUNCTION_ARGS); |
| 96 | |
| 97 | #endif /* PG_PUBLICATION_H */ |
| 98 | |