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

Всем привет. У меня есть маленькая таблица-справочник (страны, города и

т.п.). Периодически мне надо в ней что-то удалять, обновлять и т.п., по данным, которые забираю по API из другого сервиса. Забираю не изменения, а все данные целиком, т.к. их мало. Как правильно обновить данные в таблице-справочнике? Можно ли через FOR UPDATE выбрать все записи, затем очистить таблицу, после чего просто через INSERT закинуть новые? Или так неправильно?

11 ответов

9 просмотров

а ссылки на неё?

Dmitriy-Sviridov Автор вопроса
Morruth🏴‍☠️
а ссылки на неё?

"на неё" - это на кого? Если таблица, то она простейшая: id, name, type (country, area, city), parent_id. id, parent_id - int, остальное - text. id - pk

Dmitriy Sviridov
"на неё" - это на кого? Если таблица, то она прост...

вот на эту таблицу. если всё удалять и заливать снова, ссылки могут и поплыть

Dmitriy-Sviridov Автор вопроса
Morruth🏴‍☠️
вот на эту таблицу. если всё удалять и заливать сн...

id я записываю явным образом, там не sequence. id есть в тех данных, что мне прилетают по API

Dmitriy Sviridov
id я записываю явным образом, там не sequence. id ...

ну, если на этот ид уже есть ссылка, то удалить его или вообще не даст или занулит на него все ссылки ( в зависомости от параметров внешнего ключа)

Dmitriy-Sviridov Автор вопроса
Morruth🏴‍☠️
ну, если на этот ид уже есть ссылка, то удалить ег...

Ну не буду делать внешний ключ - это не проблема ж

Dmitriy Sviridov
Ну не буду делать внешний ключ - это не проблема ж

а вот так — не надо. висячие ссылки дело паршивое

Dmitriy-Sviridov Автор вопроса
Morruth🏴‍☠️
а вот так — не надо. висячие ссылки дело паршивое

Ок. Если я не буду очищать таблицу полностью, а буду явным образом удалять лишние записи, которых нет в тех данных, что пришли по API, добавлять и обновлять нужные, то как залочить таблицу целиком на время выполнения этих действий? Или даже если вовсе ничего удалять не буду, а буду только обновлять или добавлять - не принципиально. Главный вопрос в том, как залочить таблицу - можно ли через FOR UPDATE всех записей?

Dmitriy-Sviridov Автор вопроса
Morruth🏴‍☠️
https://www.postgresql.org/docs/current/sql-lock.h...

Так а просто в транзакцию нужные действия завернуть можно? Или так не годится?

Dmitriy Sviridov
Так а просто в транзакцию нужные действия завернут...

там придётся с deferred проверками извращаться

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

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

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Есть вопрос: допустим есть железка с каким-то интерфейсом(допустим usb), но как по этому интерфейсу железкой управлять неизвестно, прог нету, а управлять очень хочется надо. К...
Mixail Frolov
15
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Карта сайта