2017-04-11 11 views
1

Postgres/Npgsql을 사용하여 SQL 복제를 설정했습니다.RavenDB SQL 복제 및 Postgres uuid

우리는 Ravendb의 ID 용 가이드를 사용하고 있습니다. Postgres의 ID 열이 varchar 인 모든 항목이 정상적으로 작동하지만 Guid과 일치하는 올바른 유형 인 uuid으로 설정하면 오류가 발생합니다.

id 이외의 다른 열에서도 실패합니다.

포스트 그레스 로그는 저를 제공합니다

연산자가 존재하지 않습니다 : 문자 34 힌트에서 UUID = 텍스트 : 없음 운영자는 지정된 이름과 인수 형식 (들)과 일치하지 않습니다. 명시 적 타입 캐스트를 추가해야 할 수도 있습니다.

포스트 그레스 스키마는 다음과 같습니다

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의 uniqueidentifier 데이터 형식을 사용하여 작동하는 경우 MSSQL을 사용하기 위해 복제를 설정합니다.

답변

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; 
+1

와우 훌륭한 솔루션을 먹으 렴 :이 질문에 자신의 저자에 의해 제안 대체 솔루션입니다. 매력처럼 작동합니다. Postgres가 얼마나 강력한 지에 놀라는 것을 계속하십시오! –

+0

텍스트를 utuid로 캐스팅하는 방법이 있습니까? 이 솔루션은 복제의 "DELETE ... WHERE"부분을 수정했습니다. 이제 INSERT 부분이 실패합니다. –

+0

트릭을 수행 할 수있는 것으로 보이는 CREATE CAST를 찾았습니다. Cant는 꽤 잘 작동합니다. 나중에 더 자세히 살펴 보겠습니다. –