ターンキーソリューションではありませんが、これはトリガーを使用してこのタスクを支援するいくつかのコードです。以下では、簡潔にするために削除や更新を行わないものとします。ニーズPG> = 9.1
1)2つの新しいテーブルを準備します。 mytable_a、およびmytable_b。ソース表と同じ列を複製する:
-- move data from mytable_a -> mytable_b without stopping trigger
WITH d_rows AS (DELETE FROM mytable_a RETURNING *) INSERT INTO mytable_b SELECT * FROM d_rows;
-- export data from mytable_b -> file
\copy mytable_b to '/tmp/data.csv' WITH DELIMITER ',' csv;
-- empty table
TRUNCATE mytable_b;
は、その後、あなたがMySQLへdata.csvをインポートすることがあります。
CREATE TABLE mytable_a AS TABLE mytable WITH NO DATA;
CREATE TABLE mytable_b AS TABLE mytable WITH NO DATA;
-- trigger function which copies data from mytable to mytable_a on each insert
CREATE OR REPLACE FUNCTION data_copy_a() RETURNS trigger AS $data_copy_a$
BEGIN
INSERT INTO mytable_a SELECT NEW.*;
RETURN NEW;
END;
$data_copy_a$ LANGUAGE plpgsql;
-- start trigger
CREATE TRIGGER data_copy_a AFTER INSERT ON mytable FOR EACH ROW EXECUTE PROCEDURE data_copy_a();
が次にエクスポートする必要がある場合。
同期が必要ですか(スロー、マスターコミットの瞬間にレプリカに表示される変更)または非同期(高速ですが、レプリカの変更は少し遅れて表示されます)。非同期の場合、どのような種類の遅延を生かすことができますか:2,3秒、数時間、1日? – Tometzky
@Tometzky、それは完全に非同期タスクになることができます。遅延については、私は1日/週の間に何かで生きることができます。 – acm