У меня есть главный стол postgres
с ограничениями, первичный ключ (id
) и обычный материал.Как слить таблицу postgres в другую?
Тогда у меня есть временная таблица с одинаковыми столбцами, но без ограничений. Я использую эту временную таблицу для массовых вставных партий.
Время от времени я хочу объединить эти таблицы by id
, означает: Я хочу, чтобы вставить данные из временной таблицы в основную таблицу, гарантирующий:
- идентификаторы, которые не существуют в основной таблица должна быть просто вставляет
- идентификаторов, которые делают, следует включать обновления
Как они могут быть лучше реализованы в течение приблизительно 1 миллион + записей во временной таблице?
Это не простая задача. Если вы ищете 'postgres upsert' или' on duplicate update', вы увидите, что это довольно большая проблема, будь то на Java или непосредственно из psql. – Kayaman
Является ли ваш 'id'' serial' (т. Е. Владеет последовательностью)? Если вы хотите, чтобы ваша временная таблица 'id's ** и ** использовала последовательность для других вставок в вашей основной таблице, вы должны заблокировать всю таблицу для вставки (вам нужно исправить вашу последовательность вручную, после вставки) - upserts обычно работают лучше всего, если у вас будет другое уникальное ограничение (кроме сгенерированного первичного ключа). – pozs
'id' не является последовательностью базы данных, и я не хочу автоматического увеличения при вставке, поскольку я управляю идентификаторами извне. Я хочу, чтобы идентификатор из таблицы temp был точно таким же после слияния, поскольку они служат идентификатором, если строка должна быть обновлена (если существует id) или недавно вставлена (если идентификатор не существует). – membersound