1

Тема: Дамп вибраних колонок з таблички.

Виникла потреба проупдейтити одне/кілька полів в табличці, використовуючи дані з іншої бази даних. Оскільки mysqldump не дає такої можливості, то писав в ручну.

Отже спершу селект:
SELECT CONCAT( 'UPDATE `products` SET products_image=''', products_image, ''' WHERE products_id=''', products_id, ''';' ) AS line
FROM `products`

Далі пишемо результати в файл пропускаючи перший рядок
mysql <./select.sql | sed "1 d" > products.sql

Далі ту sql можна запускати на іншій базі даних.

Далі трохи переписав скрипти, щоб можна було використовувати для інших таблиць і рядків

cat dumpcolumn
echo "SELECT CONCAT( 'UPDATE $1 SET $3=''', $3, ''' WHERE $2=''', $2, ''';' ) AS line FROM $1 LIMIT 5;"

cat update_os_pictures
echo "Creating SQL"
./dumpcolumn products products_id products_image | mysql | sed "1 d" > products.sql

Звичайно після mysql треба прописати свої параметри конекту.

2

Re: Дамп вибраних колонок з таблички.

доречі, чогось глючило при архівуванні десь на 3-х тисячному записі. поміняв на
echo "SELECT CONCAT( 'UPDATE $1 SET $3=\"', $3, '\" WHERE $2=\"', $2, '\";' ) AS line FROM $1;"

3

Re: Дамп вибраних колонок з таблички.

Всеодно глючить
ERROR 1064 (42000) at line 3054: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL
UPDATE products SET products_image="2A46-W-3.jpg" WHERE products_id="3492"' at line 1

Звідки там той Нул береться? хто знає?

4

Re: Дамп вибраних колонок з таблички.

echo "SELECT IFNULL(CONCAT( 'UPDATE $1 SET $3=\"', $3, '\" WHERE $2=\"', $2, '\";' ),'-- for some reason this is null') AS line FROM $1;"
оце працює без проблем. Проблема була, що один з параметрів був нуль.

5

Re: Дамп вибраних колонок з таблички.

echo "SELECT CONCAT( 'UPDATE $1 SET $3=\"', IFNULL($3,\"\"), '\" WHERE $2=\"', $2, '\";' ) AS line FROM $1;"
а це ще покращений варіант.

6 Востаннє редагувалося miroslav.chandler (02.11.2012 19:52:35)

Re: Дамп вибраних колонок з таблички.

а не краще було б витянути всі данні в скрипті і проходячись циклом, зразу заносити в другу?
як не має такої можливості, треба додати додатковий шар абстракції, тобто сарелізувати в який формат(да хоть в похапе массив) і вже від нього відштовхуватися.

Прихований текст

да і юзайте postgres :)

7

Re: Дамп вибраних колонок з таблички.

Інша база лежить на іншому серваці, в скрипті по строково читати з одного сервера і писати на другий дуже довго і трафіко затратно.

А так зробив sql файл. Заархівував. rsync на інший сервак. Там запустив скрипт для виконання в MySQL того файлу. Почистив тимчасові файли.
Оце все я запхав в один шел скрипт який використовує ssh з ключами. Пишу 3 слова і синхронізую будь-яке поле будь-якої таблиці.

8

Re: Дамп вибраних колонок з таблички.

Доречі, якщо скидати оті sql в git, то можна трекати зміни по базі де потрібно.

9

Re: Дамп вибраних колонок з таблички.

Я цю тему власне відкрив, бо шукав в гуглі як зробити дамп однієї колонки і ніде не знайшов. То сам написав і думаю може ще комусь пригодиться.

Подякували: d4rkc10ud, Replace, funivan3