30 августа 2021 СуБД select psql concat
Иногда появляется необходимость скопировать некоторые поля из одной базы данных в другую. Как мне кажется, самым простым способом копирования отдельных полей у некоторых строк является генерация SQL скрипта в одной базе и исполнение этого запроса на другой. Например,
select order_num, slug from catalog_humanmenu where tree_id = 6 and is_public= true and order_num > 0 order by order_num
таким запросом выбираем необходимые строки и поля в исходной базе данных, затем из результатов этого запроса формирует скрипт обновления базы назначений
select concat('update catalog_humanmenu set order_num=',order_num,' where slug=''',slug,''';') from catalog_humanmenu where tree_id = 6 and is_public= true and order_num > 0 order by order_num;
теперь переключаем вывод результатов запроса не в терминал, а файл на локальном или удалённом диске
\o ordering-guid.txt
-- затем повторяем генератор SQL скрипта и вывод этой команды сохранится в файле ordering-guid.txt
select concat('update catalog_humanmenu set order_num=',order_num,' where slug=''',slug,''';') from catalog_humanmenu where tree_id = 6 and is_public= true and order_num > 0 order by order_num;
-- закрываем SQL сессию
\q
в новообразованном файле ordering-guid.txt необходимо удалить первые и последние строки, а затем выполнить его в базе назначения
psql < ordering-guid.txt
Всё, необходимые поля из отобранных строк перенесены в соответствующие поля и строки базы назначения