web-dev-qa-db-ja.com

Slonyでビューを複製できますか?

Slonyへのビューを作成するSQLをフィードできますか?

CREATE OR REPLACE VIEW name_of_viewなどを実行するSQLがあり、それをslonik_execute_scriptに渡してから、そのビューのみを含む一時的なSlonyセットに対してslonik_create_setを実行しようとします。

ERROR: Slony-I: table "public"."name_of_view" has no primary keyエラーで拒否されます。私の知る限り、ビューは主キーをサポートしていません。

これは、Slony管理スクリプトを使用してビューをレプリケーションに追加する方法がなく、レプリケーションクラスターのすべてのメンバーに手動でインストールする必要があることを意味しますか?

2
Zac B

Slonyはトリガーベースです。ビューにトリガーを設定できないため、Slonyを使用してビューを複製することはできません。

ただし、Slonyを使用してビューで使用されるテーブルを複製し、スレーブサーバーでビュー定義を複製することで、目的の効果を実現できます。

3
Andrei Tchijov

ドキュメントによると、通常のテーブルのみがサポートされています。

Slony-I:setAddTable_int():public.my_viewは通常のテーブルではありません通常のテーブルであるオブジェクトのみを複製できます(少なくともSET ADD TABLEを使用して)。 ビューまたはインデックスは含まれません。 (インデックスは乗車のために来ることができますが、インデックスを複製するように要求することはありません...)

http://slony.info/documentation/stmtsetaddtable.html

これを強制するためのチェックがコードにあります http://slony.info/documentation/function.setaddtable-int-integer-integer-text-name-text.html

ビューのslon_tools.confでプライマリキーまたは一意のキーを指定していないと想定しているため、表示されるエラーメッセージは正しいようです。しかし、実際に主キーまたは一意キーを指定した場合はどうなりますか?ビューによって返される列である必要があります。次に、slonik_create_setがプライマリ/一意キーチェックに合格し、代わりにエラーで失敗することを期待します。

Slony-I: setAddTable_int(): "public"."my_name_of_view" is not a regular table

それは私の2セントです。

2
JohnP