レプリケーショントランザクションストリーム内での共通管理ポイントにおいて、セットに購読される全てのノード上で任意の SQL 文を含んだスクリプトを実行します。
特定の事象オリジンはセットのオリジンでなくてはなりません。スクリプトには如何なる START もしくは COMMIT TRANSACTION 呼び出しを含んではなりません。(これは PostgreSQL 8.0 で、一度だけ入れ子になったトランザクション、aka savepoints、がサポートされました。)更に、非決定性 DML 命令文(CURRENT_TIMESTAMP でフィールドを更新するような)は、スクリプトにより変更されたデータは明示的に複製されないので、回避されるべきです。
スクリプトにより影響を受けるセットの一意の数値識別子番号
実行する SQL スクリプトを含んだファイル名です。これは相対パスで、今実行している slonik インスタンスの場所に相対的、もしくは、できる事なら、slonik が実行されるシステムの絶対パスです。
ファイルの内容は事象の一部として伝播されるので、ファイルはノードの全てからアクセス可能である必要はありません。
(オプション)セットの現在のオリジンの識別子。デフォルト値は 1。
(オプション)スクリプトを実際に実行するだけのノードの識別子。このオプションはスクリプトを全てのノードに伝播差せますが、実行するのはたった 1 つのノードです。デフォルトはそのセットで購読される全てのノード上でスクリプトが実行されます。
項14 にある警告も参照ください。
これは、他のデータベースの活動を後ろで苦境に陥れる可能性を意味する ロックを掛ける操作であることを覚えておいてください。
この事象の開始時点で、特定のセットにある全てのテーブルは関数 alterTableRestore(tab_id) によりロックが解除されています。SQL スクリプトが実行された後、alterTableForReplication(tab_id) にて"rレプリケートしている状態"に戻されます。これが意味するところは、SQL スクリプトの実行の期間にこの slon プロセスによってこれら全てのテーブルにロックが掛けられるという事です。
もしテーブルの列が変更されるとトリガーは再生成されなければならないと言う事は非常に重要で、そうしないとテーブルスキーマの新規形式に対して不適当なものとなります。
これは schemadocddlscript( integer, text, integer ) を使用します。