RavenDB Sql 复制和 Postgres uuid

RavenDB Sql Replication and Postgres uuid

我已经使用 Postgres/Npgsql 设置了 Sql 复制。

我们在 Ravendb 中使用 Guids 作为 id。 只要我在 Postgres 中的 id 列是 varchar 类型,一切都工作正常,但如果我将它设置为 uuid,这应该是匹配 Guid 的正确类型,它就会失败。

除 id 之外的其他列也失败。

Postgres 日志给我:

operator does not exist: uuid = text at character 34 HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.

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

会成功的。

我的复制设置如下所示:

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

如果您想将 UUIDTEXT 进行比较,则需要为此创建运算符。解决您的错误的方法如下所示:

CREATE FUNCTION uuid_equal_text(uuid, text) 
 RETURNS boolean 
 LANGUAGE SQL IMMUTABLE 
AS 
$body$ 
   SELECT  = ::uuid 
$body$;

CREATE OPERATOR =(
  PROCEDURE = uuid_equal_text,
  LEFTARG = uuid,
  RIGHTARG = text);

编辑:这个问题的作者自己提出的替代解决方案:

CREATE CAST (text AS uuid)
WITH INOUT
AS IMPLICIT;