我正在使用以下架构在postgres中创建一个users表:
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,我的假设是不应该写入)?
另外,自动增量键如何在主从设备之间保持同步,是否通过以与主设备相同的顺序重放/插入行来保持同步?
你误解了流媒体复制,或者我误解了你想要做的事情。
流复制备用数据库是主数据库的物理副本,如果是hot_standby = on
,则可以建立只读连接。
表的内容在两个服务器上始终相同,并且您将无法在备用数据库上插入行,因此DEFAULT
子句中的函数是否具有确定性并不重要。
看起来您可能正在寻找一种称为“多主复制”的东西,以便您可以修改两台服务器上的数据。 PostgreSQL没有提供开箱即用的解决方案。
您似乎了解了多主复制的一些问题,因为您提出了这个问题。在大多数情况下,最好选择一个问题较少的不同架构。