1

我正在使用以下架构进行复制。

主(出版)数据库模式:

CREATE TABLE public.patient (
  pk int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
  patientid int8 NOT NULL  GENERATED ALWAYS AS (public.fnGetPrimaryKey(pk, clientid)) STORED,
  firstname varchar(50) NOT NULL,
  clientid int2 NOT NULL,
  CONSTRAINT pk_patient PRIMARY KEY (patientid));

副本身份:

CREATE UNIQUE INDEX patient_replica_identity ON patient (patientid);
ALTER TABLE patient REPLICA IDENTITY USING INDEX patient_replica_identity;

副本(订阅)数据库模式:

CREATE TABLE public.patient (
    pk int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
    patientid int8 NOT NULL  GENERATED ALWAYS AS (public.fnGetPrimaryKey(pk, clientid)) STORED,
    firstname varchar(50) NOT NULL,
    clientid int2 NOT NULL,
    CONSTRAINT pk_patient PRIMARY KEY (patientid)
);

当我开始复制时,系统会抛出以下错误:

错误:发布者没有发送逻辑复制目标关系“public.patient”期望的副本标识列

如果我将主键 patientid 更改为CONSTRAINT pk_patient PRIMARY KEY (clientid,pk),它将正常工作。

我不想更改订阅数据库的主键。

如果您有任何解决方案,请告诉我。

4

0 回答 0