Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 04.06.2018
Сообщений: 7

Обновление таблицы построчно данными из массива

15.12.2020, 18:05. Показов 3200. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! прошу помощи. у меня имеется таблица

SQL Скопировано
1
2
3
4
5
6
CREATE TABLE cerebro.tasks_images
(
    task_image_id INTEGER NOT NULL
    task_id INTEGER,
    image_path text 
    image text)
имеется функция с входными данными

SQL Скопировано
1
2
3
4
insert_tasks_attachments(
    p_task_id INTEGER,
    p_attachments_paths_img text[],
    p_attachments_img text[])
имеется запрос внутри ф-ии

SQL Скопировано
1
2
INSERT INTO cerebro.tasks_images (task_id, image_path, image) 
SELECT p_task_id, unnest(p_attachments_paths_img),unnest(p_attachments_img);

но если мне нужно обновить столбцы image_path и image где task_id = p_task_id

SQL Скопировано
1
2
3
IF EXISTS (SELECT task_id FROM cerebro.tasks_images WHERE p_task_id = task_id)
THEN
  UPDATE tasks_images SET (image_path, image) =p_attachments_paths_img, p_attachments_img WHERE p_task_id = task_id;

Каким образом мне грамотно внести изменения в таблицу? чтобы по одному элементу из массивов p_attachments_paths_img и p_attachments_img уходили в одну строку с удовлетворяющим условием p_task_id = task_id?

ps. Массивы имеют одинаковую размерность: на одну картинку один путь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2020, 18:05
Ответы с готовыми решениями:

Обновление таблицы данными из другой таблицы
Просьба помочь написать update. Имеются три таблицы: auto c полями marka,number таблица info с полями pid,code и таблица vendor c полями...

Заполнение массива данными из нескольких textbox построчно
Нужно заполнить массив данными при нажатии на кнопку. Вводим данные в textbox-ы, нажимает на кнопку, заполняется первая строка массива. ...

Обновление таблицы с данными
Добрый вечер! Имеется сырой Vue компонент для работы с данными таблицы. Данные представляет пользователю с помощью вот такого v-for: ...

3
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
15.12.2020, 21:58
См. в сторону UPDATE ... SET a, b,... = (SELECT ...)
Что-то вроде

SQL Скопировано
1
2
UPDATE tasks_images SET (image_path, image) = (SELECT unnest(p_attachments_paths_img), unnest(p_attachments_img))
WHERE p_task_id = task_id;
0
0 / 0 / 0
Регистрация: 04.06.2018
Сообщений: 7
16.12.2020, 12:23  [ТС]
В ходе размышления пришел к тому, что, если количество совпадений по p_task_id и кол-во строк в массиве будет не совпадать - устаревшие данные нужно будет удалять. Так что решил не мудрить и сперва делать delete по совпадениям и далее insert, который работает удовлетворительно для меня.

SQL Скопировано
1
2
3
DELETE FROM cerebro.tasks_images WHERE p_task_id = task_id;
        INSERT INTO cerebro.tasks_images (task_id, image_path, image) 
        SELECT p_task_id, unnest(p_attachments_paths_img), unnest(p_attachments_img);
0
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
16.12.2020, 12:59
Ну если честно, то под капотом у PostgreSQL выполнение UPDATE это фактически и есть выполнение DELETE+INSERT. Только все скрыто движком мультиверсионника... Так что вы тут с верхней точки расммотрения ничего не потеряли.
Но демон в деталях!
Для такого подхода как у вас обязательно нужен Вакуум и чем больше и чаще таких изменений, тем агрессивнее. В таком же объем вакуум нужен и для UPDATE.
И плюс вы еще теряете возможность пользоваться такой вещью как hot update - обновление записей "по-месту" прямо в том же блоке данных. Этот механизм специально был сделан для увеличения производительности и уменьшения необходимости вакуумизации. В деталях это расписано, например, здесь.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.12.2020, 12:59
Помогаю со студенческими работами здесь

Обновление ComboBox с данными из таблицы access
Здравствуйте. Столкнулся со следующей проблемой. В программе присутствует ComboBox в который записываются значения из столбца ФИО...

Обновление таблицы с данными из базы данных
Если форма с таблицей(JTable) с данными и кнопки для: 1) Поиска данных; 2) Удаления записи; 3) Добавления записи. В данным момент...

Обновление таблицы Access данными из DGV
Доброго времени суток! Пишу проект, который часто обращается к базе данных Access, иногда выводит таблицы в DataGridView, где они...

Обновление таблицы данными из неё же через запрос с inner join
Добрый день, требуется обновить поле field таблицы table для записей из запроса select * from table t inner join doc on...

Массовая вставка/обновление таблицы сервера данными из DataTable (DataSet)
Есть DataSet ( таблица в DataSet.Tables: ID-ключ, NAME, PROVIDER) И таблица dbo.NT с аналогичной структурой на сервере MSSQL. Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Коммуникация в реальном времени с SignalR в C# на примере создания чата
UnmanagedCoder 17.04.2025
Современный веб стремительно эволюционирует от статичных страниц к динамичным приложениям, где пользователи ожидают мгновенной реакции на свои действия. Представим, что вы отправляете сообщение. . .
Реализация CQRS с MediatR на C# .NET
stackOverflow 17.04.2025
Современная разработка программного обеспечения постоянно ищет пути повышения эффективности организации кода. Архитектурные паттерны появляются, эволюционируют, и те, что проявляют свою. . .
Verilog и интеллектуальная собственность - "глазами" обученной LM модели.
Hrethgir 17.04.2025
В сети встречаются участники, заявляющие что код на Verilog ни о чём не говорит. Но вот патентная практика на самом деле показывает обратное ими утверждаемому. То-есть код на Verilog включают в. . .
Свап-файл дополнительно к разделу (если вдруг не хватает или не создан)
jigi33 17.04.2025
ПОДКЛЮЧЕНИЕ ДОПОЛНИТЕЛЬНОГО SWAP ПРОСТРАНСТВА, Т. О. , РАСШИРЕНИЕ ЕГО РАЗМЕРА В Linux можно использовать как раздел подкачки (swap), так и файл подкачки (swap-файл). Чтобы создать swap-файл вместо. . .
Указатели в Swift: Небезопасные, буферные, необработанные и управляемые указатели
mobDevWorks 16.04.2025
Указатели относятся к наиболее сложным и мощным инструментам языка Swift. В своей сути указатель — это переменная, которая хранит адрес участка памяти, где расположены данные, а не сами данные. . . .
Жизненный цикл HTTP-запросов в ASP.NET Core MVC
UnmanagedCoder 16.04.2025
Разработка веб-приложений на ASP. NET MVC часто выглядит как простой процесс: получили запрос, обработали его в контроллере, отрендерили представление и отправили ответ пользователю. Однако за этой. . .
Введение в Django: Создаём приложение портфолио
py-thonny 16.04.2025
Django – один из самых мощных веб-фреймворков на Python, который позволяет быстро создавать сложные веб-приложения. В отличие от других фреймворков, Django предоставляет богатый набор встроенных. . .
Итераторы в C++: Продвинутые техники использования
bytestream 16.04.2025
Итераторы - одна из самых гибких и выразительных концепций в C++, позволяющих абстрагировать обход элементов контейнера от его внутренней реализации. За прошедшие годы они эволюционировали от простых. . .
Обработка естественного языка в Python с помощью spaCy
py-thonny 16.04.2025
Обработка естественного языка (Natural Language Processing, NLP) — одна из самых быстрорастущих областей искусственного интеллекта, которая позволяет компьютерам понимать, интерпретировать и. . .
Работа с железом в PHP Laravel с Pinout
Jason-Webb 16.04.2025
Граница между программным и аппаратным миром стремительно размывается. Современные веб-приложения уже не ограничиваются цифровым пространством — они активно взаимодействуют с физическими. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер