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管理スクリプトを使用してビューをレプリケーションに追加する方法がなく、レプリケーションクラスターのすべてのメンバーに手動でインストールする必要があることを意味しますか?
Slonyはトリガーベースです。ビューにトリガーを設定できないため、Slonyを使用してビューを複製することはできません。
ただし、Slonyを使用してビューで使用されるテーブルを複製し、スレーブサーバーでビュー定義を複製することで、目的の効果を実現できます。
ドキュメントによると、通常のテーブルのみがサポートされています。
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セントです。