2017-04-11 4 views
1

をのuuid。RavenDB SQLレプリケーションとPostgresは、私はPostgresの/ Npgsqlのを使用してSQLレプリケーションを設定している

我々はRavendb内のIDのGUIDを使用しています。 すべては限りPostgresの中の私のidカラムは、タイプvarcharであると正常に動作しているが、私はGuidと一致する正しいタイプのものでなければならないuuid、それを設定している場合、それは失敗します。

また、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データ型を使用して動作します。

答えて

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); 

EDIT:この質問自らの著者によって提案された代替ソリューション:

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

うわー素晴らしいソリューションのthatsあなたのエラーを解決する1は次のようになります。魅力のように動作します。 Postgresがどれほど強力であるかに驚かされ続ける! –

+0

同様のuuidするテキストからのキャストのためにこれを行う方法はありますか? このソリューションは、レプリケーションの「DELETE ... WHERE」部分を修正しました。これでINSERT部分が失敗します。 –

+0

このトリックを行うことができるように見えるCREATE CASTが見つかりました。しかし、それはかなり動作します。 は、あなたが正しい –

関連する問題