т.п.). Периодически мне надо в ней что-то удалять, обновлять и т.п., по данным, которые забираю по API из другого сервиса. Забираю не изменения, а все данные целиком, т.к. их мало. Как правильно обновить данные в таблице-справочнике? Можно ли через FOR UPDATE выбрать все записи, затем очистить таблицу, после чего просто через INSERT закинуть новые? Или так неправильно?
а ссылки на неё?
"на неё" - это на кого? Если таблица, то она простейшая: id, name, type (country, area, city), parent_id. id, parent_id - int, остальное - text. id - pk
вот на эту таблицу. если всё удалять и заливать снова, ссылки могут и поплыть
id я записываю явным образом, там не sequence. id есть в тех данных, что мне прилетают по API
ну, если на этот ид уже есть ссылка, то удалить его или вообще не даст или занулит на него все ссылки ( в зависомости от параметров внешнего ключа)
Ну не буду делать внешний ключ - это не проблема ж
а вот так — не надо. висячие ссылки дело паршивое
Ок. Если я не буду очищать таблицу полностью, а буду явным образом удалять лишние записи, которых нет в тех данных, что пришли по API, добавлять и обновлять нужные, то как залочить таблицу целиком на время выполнения этих действий? Или даже если вовсе ничего удалять не буду, а буду только обновлять или добавлять - не принципиально. Главный вопрос в том, как залочить таблицу - можно ли через FOR UPDATE всех записей?
https://www.postgresql.org/docs/current/sql-lock.html
Так а просто в транзакцию нужные действия завернуть можно? Или так не годится?
там придётся с deferred проверками извращаться
Обсуждают сегодня