уже весь интернет перерыла, как я могу выгрузить все загруженные ранее в нее файлы, при том что бы сохранилось нужно мне название файла, файл в формате xml и сохранение шло локально в нужную папку?)
Такое вообще возможно?)
Можно. Для этого надо открыть документацию к вашей таблице. Или спросить более опытного своего коллегу, который знает что это у вас за таблица и как с ней работать.
Не у кого спросить пока что, сказали до конца дня предоставить скрипт по выгрузке. Я вообще джавист, на Джаве могу это реализовать, а вот при помощи sql….
SQL не пишет ни в какие "локальные файлы" (по крайней мере, в норме) — он вообще не для этого. > Я вообще джавист, на Джаве могу это реализовать Ну и реализовали бы, зачем SQL-то мучить? ;)
Заказчику нужен sql скрипт))
да, можно в psql
А вечный двигатель ему не нужен? ;) Ради любопытства — выполняемый чем (каким клиентом (psql?) — сам по себе PostgreSQL никаких "sql скриптов" выполнять не умеет, если что), где (на сервере, где установлен PostgreSQL, или удалённо?) и с какими правами доступа (superuser или нет)?
Superuser, сама база на удаленном сервере, клиенты - phAdmin, DBeaver в основном)
а покажите схему таблицы
А разве у этих клиентов есть какие-то встроенные [скриптовые] (мета)языки (вот в psql есть, например)? Иначе я просто не понимаю, какими средствами Вы что-то собираетесь записывать в локальные файлы...
Я если честно тоже не понимаю 😅 Да в целом sql не мое, просто дали задание и приходится сейчас искать как это сделать… А что бы вы могли посоветовать?)
Создайте дамп таблицы)))
Не, ну а что?))) Задача: выгрузить как-то так чтобы было просто удобно и читаемо, да ещё и в виде SQL. Пусть будет дамп в SQL формате)
Правильно я понял, в таблице хранятся xml файлы, Вам надо написать скрипт, который выгрузит каждый файл (в xml) при этом даст файлу "правильное" имя (видимо хранится отдельным полем в таблице) ? Нужно еще и структуру таблицы смотреть.
да что так, что так, одного sql не хватит всё равно
DO $$ DECLARE file_record RECORD; file_name TEXT; xml_content TEXT; BEGIN FOR file_record IN SELECT filename, xml_content FROM your_table LOOP file_name := file_record.filename; xml_content := file_record.xml_content; file_name := '/path/to/files/' || file_name; EXECUTE format('COPY (SELECT %L) TO %L', xml_content, file_name); END LOOP; END $$;
Идея такая ещё есть)
> сама база на удаленном сервере Я так понял, что файлы нужны на клиенте, а не там... впрочем, автору виднее.
А если там с одинаковыми file_name будет?
а сколько там в таблице строк? Сколько XML? может там 5 строк... можно тогда скопипастить в пустые файлы
:-)))))) вариант для затравки, а так можно хоть 1000 условий кинуть)
И вот способ в локальном посгресе уже сработает
Спасибо, пробою, но ошибка) Я если честно в этом вообще ничего не понимаю, из того что вы мне накидали 😱
А есть прикольная программа Loginom - отечественная, все по русски там. Для локального использования бесплатная. Можно в ней сделать соединение в ваш PostgreSQL и там мышкой накидать цикл, что бы эти XML выгрузить в папку... но вот как это там сделать я не подскажу
Так Вы бы задачу подробнее объяснили... и вообще, зачем "скрипт" — кое-что из того, что Вам советуют (дампы и т.п.), скорее подходит для того, чтобы однократно "выгрузить и забыть". А для FDW нужен локальный сервер PostgreSQL и наличие доступа на удалённый (в т.ч. в будущем).
Если однократно — достаточно просто сделать дамп (базы или таблиц(ы) — Вам виднее), зачем все эти "пляски" со скриптами?!
А дамп позволяет выгрузить все эти файлы?) То есть если в базе 5000 файлов, я смогу с помощью дампа получить на пк все эти 5000 файлов в нужном мне формате?)
Вы всю базу получите. Я не понимаю, зачем Вам именно файлы? > у заказчика полностью сносится старая бд и создаваться новая Вот это зачем делается, например? Там структура базы меняется, или... что?
Да, меняется и логика работы с файлами и структура
Так почему бы не сделать (и не применить в БД заказчика) скрипт для миграции старой схемы данных в новую, как это обычно делается? > Поэтому файлы придется загружать повторно Т.е. структура меняется настолько, что иначе это сделать невозможно, что ли (как-то это странно)?
Там просто как раз были баги в загрузке файлов и пропускались в базу некорректный файлы, ну там много всяких багов вообщем И в новой версии приложение уже не пропускает эти файлы А в ручную их перебрать не получится, поэтому нужно загрузить повторно в приложение, вот)
Ну так возьмите у заказчика дамп этой базы, разверните локально у себя, выгрузите файлы (хоть программой на Java, хоть примерно так, как тут показывали (plpgsql))... а дальше Вам виднее, что с ними делать.
Воспользуйтесь командой COPY выгрузите всю таблицу в файл. Когда буде новая бд, создайте временную таблицу, через COPY загрузите файл и по нужным условиям вставляете в новую таблицу.
Обсуждают сегодня