172 похожих чатов

Коллеги, добрый день. А не подскажите правильный способ удаления нескольких

элементов из массива используя входящий массив?
Дано: таблица в котороый одно из полей - массив строк. Необходимо сделать UPDATE и удалить все строки переданные в другом массиве. Массивы ориентировочно не будут сильно большими, но могут быть до 150-200 элементов.

14 ответов

22 просмотра

Да просто UPDATE a_table SET a_field = some_function(a_field, $1) WHERE .... Т.е. легче написать функцию разности массивов, и использовать её, мне кажется.

Evgeniy- Автор вопроса
Yaroslav Schekin
Да просто UPDATE a_table SET a_field = some_functi...

понял, спасибо, тоже пришел к такому варианту - но решил на всякий случай спросить - а то выстрелю еще себе в ногу :)

Неправильный способ: сделать unnest, подразумеваемый в нём lateral join, отфильтровать нужное, затем сгруппировать по pkey обратно при помощи array_agg. Правильный способ: переделать базу, чтобы никакого массива не было, сделать отдельную таблицу с отношэнинм 1-ко-многим.

Evgeniy- Автор вопроса
Ilya Anfimov
Неправильный способ: сделать unnest, подразумеваем...

А какой тогда PK там делать? FK - понятно у нас будет на source таблицу.

Evgeniy
А какой тогда PK там делать? FK - понятно у нас бу...

Если это действительно массив — то (referenced_field, position), очевидно. Если же это на самом деле множество, как обычно бывает — (referenced_field, value).

Evgeniy- Автор вопроса
Yaroslav Schekin
Если это действительно массив — то (referenced_fie...

Да, order не важен пока что. Почему-то считал что плохо иметь таблицу у которой по сути PK - это вся таблица. Или это вообще нормально? (учитывая, что value - это text)

Evgeniy
Да, order не важен пока что. Почему-то считал что ...

> Почему-то считал что плохо иметь таблицу у которой по сути PK - это вся таблица. Все обычные таблицы many to many — именно такие. Т.е. понятия не имею, почему Вы так считали. ;) > (учитывая, что value - это text) Ну и что? Если по сути это правильно (если дубликаты — ошибка), этот ключ должен там быть.

Evgeniy- Автор вопроса
Yaroslav Schekin
> Почему-то считал что плохо иметь таблицу у котор...

Да я всегда так и делал. Но откуда-то в голове засело - что это Bad Practice. В нашем деле же как - делаешь что-то делаешь - а потом приходит осознание, что а вдруг что-то не то делаешь. :)

Evgeniy
А какой тогда PK там делать? FK - понятно у нас бу...

Пк не делать, а брать тот, что в таблицэ ужэ есть. Можно и не первичный ключ, а любой, на самом деле — но я решыл не усложнять тот комментарий лишними подробностями.

Evgeniy
Да, order не важен пока что. Почему-то считал что ...

А, то есть это вопрос по правильному способу был что ли?

Ilya Anfimov
А, то есть это вопрос по правильному способу был ч...

В таком случае мой пред-предыдущий ответ относится не к тому.

Evgeniy- Автор вопроса
Ilya Anfimov
В таком случае мой пред-предыдущий ответ относится...

Ага, а то уже начал переделывать :) Ведь сделал же изначально так - но нет, решил а вдруг нереляционно - будет лучше :)

Evgeniy
Ага, а то уже начал переделывать :) Ведь сделал же...

Нет, как раз один-ко-многим и весь кортэж первичный ключ — это классика. А массив, с частями которого что-то делают — это не 0нф.

Evgeniy- Автор вопроса
Ilya Anfimov
Нет, как раз один-ко-многим и весь кортэж первичны...

Ну супер, на самом деле успокоили меня! Спасибо большое! Обычно стараюсь one-to-many все-таки более осмысленными делать, нежели просто ключ/значение, но тут как ни крутил - не нужно ничего дополнительного. Хотя, теперь и расширять проще будет. В общем, Илья, Ярослав, спасибо еще раз за ваши ответы!

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта