0

我正在使用以下模式在 postgres 中创建用户表:

CREATE TABLE users
(
    uuid character uuid COLLATE pg_catalog."default" NOT NULL DEFAULT uuid_generate_v4(),
    first_name character varying(100) COLLATE pg_catalog."default",

    CONSTRAINT agents_pkey PRIMARY KEY (uuid)
)

uuid是类型的主键uuid。我uuid_generate_v4()用来生成 uuid 值。

我现在不在复制模式下使用 Postgres。
但是后来,当我开始使用复制(很可能是 WAL 流复制)时,这会在我添加副本时导致问题吗?
这是否类似于使用非确定性函数 (time now()) 的情况?

同一用户的主副本和副本之间的 uuid 值是否可以不同(不确定 uuid 是否写入 WAL,我的假设是不应该写入)?

此外,自动增量键如何在主从之间保持同步,是否通过以与主控相同的顺序重播/插入行来保持同步?

4

1 回答 1

0

要么你误解了流复制,要么我误解了你想要做什么。

流复制备用是主副本的物理副本,如果是hot_standby = on,您可以建立只读连接。

两台服务器上的表内容总是相同的,并且您将无法在备用服务器上插入一行,因此DEFAULT子句中的函数是否具有确定性并不重要。

看起来您可能正在寻找一种称为“多主复制”的东西,以便您可以修改两台服务器上的数据。PostgreSQL 没有提供开箱即用的解决方案。

自从您提出这个问题以来,您似乎了解了多主复制的一些问题。在大多数情况下,最好选择问题较少的不同架构。

于 2019-02-26T13:25:33.270 回答