でのMySQLからPostgreSQLのにOnelinerパイプだから私は3台のサーバ間でのbashの日常を使用して、データのかなり多くの配管います:bashの
- サーバーAのmysql(SSH経由の接続)
- サーバーBがちょうどですが私は bashスクリプトを実行しています。
- サーバCはpostgresql 9.6です。
varcharの真ん中にある1つのテーブルに二重引用符を付けて1つの行にするまで、すべてが良好でした。これは挿入レベル(Pg側)で私のパイプを壊しています。
実際、Mysqlからこのようにデータを取得するときは、引用符で囲まれません。ですから、COPYの基本的な振る舞いとそのQUOTEパラメータのために、私は結局信じています。ここで
はbashのコードです:
ssh -o ConnectTimeout=5 -i "$SSH_KEY" "$SSH_USER"@"$SSH_IP" 'mysql -h "$MYHOST" -u "$USER"-p"$PWD" prod -e "SELECT * FROM tableA "' | \
psql -h "$DWH_IP" "$PG_DB" -c "COPY tableA FROM stdin WITH CSV HEADER DELIMITER E'\t' NULL AS 'NULL';"
私は失敗したCOPYパラメータQUOTEで遊んでみましたけど。 パイプラインの途中にsedを置くべきでしょうか? mysqlからデータを取得するときに二重引用符を試しましたが、mysqlがこのようなパイプで使用されているときに関連するパラメータを見つけることができませんでした。
私は1本のパイプで物事を保つためにリクと思います(なしはmysql-> CSVその後、CSV-> PGください)。#
ありがとう!ここで
だけ考えます。https:// wiki.postgresql.org/wiki/Foreign_data_wrappers –
@ VaoTsunありがとうございます、私はかなり多くのfdwを使用しています。しかし、私の知る限りでは、それらのどれもsshとの接続を許可しません。またはそれらを行うのですか? – Breathe
あなたはsshトンネルを設定することができますので、mysqlはpostgresのlocalhostを参照します –