RavenDB Sql Replication和Postgres uuid

时间:2017-04-11 11:19:05

标签: postgresql ravendb uuid guid npgsql

我使用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

将使其发挥作用。

我的复制设置如下所示:

Replication setup 如果我将复制设置为使用MSSql,则它使用MSSql的uniqueidentifier数据类型。

1 个答案:

答案 0 :(得分:2)

如果您想将UUIDTEXT进行比较,则需要为此创建运算符。解决错误的那个看起来像这样:

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;