0
所以我管了很多使用3臺服務器之間的bash日常的數據:Oneliner管從MySQL PostgreSQL的使用bash
- 服務器A中的MySQL(通過SSH連接)
- 服務器B僅僅是一個centos服務器,我運行 bash腳本。
- 服務器C是postgresql 9.6。
所有這一切都很好,直到一張桌子在varchar的中間有一個雙引號。這是在插入層面打破我的管(在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參數報價,但未能成功播放。 我應該在管道中間放一些sed嗎? 我也嘗試了從mysql中獲取數據時雙引號,但是當mysql在像這樣的管道中使用時找不到相關參數。
我LIK保持對事物的一個管(沒有MYSQL-> CSV然後CSV-> PG請)。#
謝謝!
只是一個想法:https://開頭wiki.postgresql.org/wiki/Foreign_data_wrappers –
@VaoTsun謝謝,我使用fdw相當多。然而就我所知,他們都不允許通過ssh進行連接;或者他們? – Breathe
你可以設置ssh隧道,所以mysql會查看localhost for postgres –