0

Мы нормировать наш довольно большой стол, чтобы отделить названия магазинов и сведения о продукте, что-то вроде:ВСТАВИТЬ к внешней таблице, если оно не существует

CREATE TABLE store_products 
(
    id BIGINT DEFAULT PRIMARY KEY NOT NULL, 
    storeid INTEGER REFERENCES store(id), 
    productid BIGINT REFERENCES product_details(id) 
    producturlid BIGINT REFERENCES product_url(id) 
); 

Мы получаем дамп магазинов продуктов в формате JSON и мы перебирайте каждый элемент и вставляйте его в Postgres через консольное приложение Delphi. Он делает это одновременно (так что 4 потока вставляются и проходят через массив JSON продуктов).

Сначала он проверяет, является ли название магазина существует в store таблицы, если не вставляет его и кэширует возвращающийся идентификатор, делает то же самое для product по названию и product_url по ссылке.

Есть ли способ Postgres вставить данные в эту таблицу (и заграничные таблицы) за один раз, не выполняя все эти проверки один за другим? Я посмотрел на CTE (WITH), но я не уверен, что это решение этой проблемы.

В обратном и четвертом виде код и его внутри транзакции становится тяжелым.

Есть некоторые older SO posts, которые похожи, но решения не кажутся жизнеспособными. Кажется, что я смотрю this one с использованием USPERT и CTE.

ответ

0

После того, как я немного поиграл, я решил ответить на этот вопрос stackoverflow post.

Ответ: Function with UPSERT in Postgres 9.5 by @Erwin Brandstetter, какой отличный способ сделать это! так впечатляет.

 Смежные вопросы

  • Нет связанных вопросов^_^