mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-08 10:46:59 +02:00
bc1adc651b
In the pgoutput plugin, skip changes for relations that are not publishable, per is_publishable_class(). This concerns in particular materialized views and information_schema tables. While those relations cannot be part of a publication, per existing checks, they will be considered by a FOR ALL TABLES publication. A subscription would not actually apply changes for those relations, again per existing checks, but trying to match incoming changes to local tables on the subscriber would lead to errors if no matching local table exists. Skipping those changes on the publisher avoids sending useless changes and eliminates the error. Bug: #15044 Reported-by: Chad Trabant <chad@iris.washington.edu> Reviewed-by: Petr Jelinek <petr.jelinek@2ndquadrant.com>
106 lines
2.8 KiB
C
106 lines
2.8 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* pg_publication.h
|
|
* definition of the relation sets relation (pg_publication)
|
|
*
|
|
* Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/catalog/pg_publication.h
|
|
*
|
|
* NOTES
|
|
* the genbki.pl script reads this file and generates .bki
|
|
* information from the DATA() statements.
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PG_PUBLICATION_H
|
|
#define PG_PUBLICATION_H
|
|
|
|
#include "catalog/genbki.h"
|
|
#include "catalog/objectaddress.h"
|
|
|
|
/* ----------------
|
|
* pg_publication definition. cpp turns this into
|
|
* typedef struct FormData_pg_publication
|
|
*
|
|
* ----------------
|
|
*/
|
|
#define PublicationRelationId 6104
|
|
|
|
CATALOG(pg_publication,6104)
|
|
{
|
|
NameData pubname; /* name of the publication */
|
|
|
|
Oid pubowner; /* publication owner */
|
|
|
|
/*
|
|
* indicates that this is special publication which should encompass all
|
|
* tables in the database (except for the unlogged and temp ones)
|
|
*/
|
|
bool puballtables;
|
|
|
|
/* true if inserts are published */
|
|
bool pubinsert;
|
|
|
|
/* true if updates are published */
|
|
bool pubupdate;
|
|
|
|
/* true if deletes are published */
|
|
bool pubdelete;
|
|
|
|
} FormData_pg_publication;
|
|
|
|
/* ----------------
|
|
* Form_pg_publication corresponds to a pointer to a tuple with
|
|
* the format of pg_publication relation.
|
|
* ----------------
|
|
*/
|
|
typedef FormData_pg_publication *Form_pg_publication;
|
|
|
|
/* ----------------
|
|
* compiler constants for pg_publication
|
|
* ----------------
|
|
*/
|
|
|
|
#define Natts_pg_publication 6
|
|
#define Anum_pg_publication_pubname 1
|
|
#define Anum_pg_publication_pubowner 2
|
|
#define Anum_pg_publication_puballtables 3
|
|
#define Anum_pg_publication_pubinsert 4
|
|
#define Anum_pg_publication_pubupdate 5
|
|
#define Anum_pg_publication_pubdelete 6
|
|
|
|
typedef struct PublicationActions
|
|
{
|
|
bool pubinsert;
|
|
bool pubupdate;
|
|
bool pubdelete;
|
|
} PublicationActions;
|
|
|
|
typedef struct Publication
|
|
{
|
|
Oid oid;
|
|
char *name;
|
|
bool alltables;
|
|
PublicationActions pubactions;
|
|
} Publication;
|
|
|
|
extern Publication *GetPublication(Oid pubid);
|
|
extern Publication *GetPublicationByName(const char *pubname, bool missing_ok);
|
|
extern List *GetRelationPublications(Oid relid);
|
|
extern List *GetPublicationRelations(Oid pubid);
|
|
extern List *GetAllTablesPublications(void);
|
|
extern List *GetAllTablesPublicationRelations(void);
|
|
|
|
extern bool is_publishable_relation(Relation rel);
|
|
extern ObjectAddress publication_add_relation(Oid pubid, Relation targetrel,
|
|
bool if_not_exists);
|
|
|
|
extern Oid get_publication_oid(const char *pubname, bool missing_ok);
|
|
extern char *get_publication_name(Oid pubid);
|
|
|
|
extern Datum pg_get_publication_tables(PG_FUNCTION_ARGS);
|
|
|
|
#endif /* PG_PUBLICATION_H */
|