Поэтому я ТРУБОПРОВОДНЫЙ довольно много данных, используя Баш ежедневно между 3 серверами:Oneliner трубы к PostgreSQL из MySQL с Башем
- Сервером А MySQL (соединение через SSH)
- сервер B просто centos, где я запускаю сценарий bash .
- Сервер C - postgresql 9.6.
Все было хорошо, пока один стол не получил один ряд с двойной кавычкой в середине варчара. Это разрушает мою трубу на уровне вставки (на стороне pg).
Действительно, при получении данных из Mysql он не цитируется. Поэтому я считаю, что в конечном итоге это связано с основным поведением COPY и его параметром QUOTE.
Вот код Баш:
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 используется в таком канале.
Я бы лик, чтобы держать вещи в одной трубе (без MYSQL-> CSV затем CSV-> PG пожалуйста). #
Спасибо!
только мысль: https: // wiki.postgresql.org/wiki/Foreign_data_wrappers –
@VaoTsun Спасибо, я использую fdw довольно много. Тем не менее, насколько мне известно, ни одна из них не позволяет подключиться к ssh; или они? – Breathe
вы можете настроить ssh tunnel, так что mysql будет смотреть на localhost для postgres –