我使用Postgres / Npgsql设置了Sql Replication。
我们在Ravendb中使用Guids作为ID。
只要我在Postgres中的id列的类型为varchar
,一切正常,但如果我将其设置为uuid
,它应该是匹配Guid
的正确类型,则会失败。
对于除id以外的其他列,它也会失败。
Postgres日志给了我:
运算符不存在:uuid =字符34处的文本 提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。
Postgres架构如下所示:
CREATE TABLE public.materiels
(
id uuid NOT NULL,
type character varying(50),
nummer integer,
...
CONSTRAINT materiels_pkey PRIMARY KEY (id)
)
用
替换第一行id character varying(50) NOT NULL
将使其发挥作用。
我的复制设置如下所示:
答案 0 :(得分:2)
如果您想将UUID
与TEXT
进行比较,则需要为此创建运算符。解决错误的那个看起来像这样:
CREATE FUNCTION uuid_equal_text(uuid, text)
RETURNS boolean
LANGUAGE SQL IMMUTABLE
AS
$body$
SELECT $1 = $2::uuid
$body$;
CREATE OPERATOR =(
PROCEDURE = uuid_equal_text,
LEFTARG = uuid,
RIGHTARG = text);
编辑:本问题的作者自己建议的替代解决方案:
CREATE CAST (text AS uuid)
WITH INOUT
AS IMPLICIT;