powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / обновление таблицы построчно данными из массива
4 сообщений из 4, страница 1 из 1
обновление таблицы построчно данными из массива
    #40028084
SERGEY_MSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! прошу помощи. у меня имеется таблица

Код: plaintext
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) 

имеется функция с входными данными

Код: plaintext
1.
2.
3.
4.
insert_tasks_attachments(
	p_task_id integer,
	p_attachments_paths_img text[],
	p_attachments_img text[])

имеется запрос внутри ф-ии

Код: plaintext
1.
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

Код: plaintext
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 / 0
обновление таблицы построчно данными из массива
    #40028128
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERGEY_MSK,

Что то у вас очень странная постановка задачи.
Вот нашлось по p_task_id 1 строка... а в массиве на входе у вас 20 строк... и что дальше делать?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
обновление таблицы построчно данными из массива
    #40028284
SERGEY_MSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

нужно было с помощью update занести в строки таблицы с совпавшим p_task_id, строки из массива на входе: одна строка массива = одна строка в таблице.
В ходе размышления пришел к тому, что, если количество совпадений по p_task_id и кол-во строк в массиве будет не совпадать - устаревшие данные нужно будет удалять. Так что решил не мудрить и сперва делать delete по совпадениям и далее insert, который работает удовлетворительно для меня.

Код: plaintext
1.
2.
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 / 0
обновление таблицы построчно данными из массива
    #40028290
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERGEY_MSK
Maxim Boguk,

нужно было с помощью update занести в строки таблицы с совпавшим p_task_id, строки из массива на входе: одна строка массива = одна строка в таблице.
В ходе размышления пришел к тому, что, если количество совпадений по p_task_id и кол-во строк в массиве будет не совпадать - устаревшие данные нужно будет удалять. Так что решил не мудрить и сперва делать delete по совпадениям и далее insert, который работает удовлетворительно для меня.

Код: plaintext
1.
2.
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);


да в такой постановке наверное самое правильное решение.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / обновление таблицы построчно данными из массива
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]