Самый быстрый запрос для вставки нескольких пар строк с перекрестными ссылками в PSQL?

Таким образом, существует такая ситуация, когда у вас есть таблица, в которую вы хотите вставить строки попарно со ссылкой друг на друга. Так же, как в бухгалтерском учете с двумя записями, у каждого предмета есть противоположность. Вот эта таблица:

CREATE SEQUENCE tbl_item_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

CREATE TABLE tbl_item (
id integer NOT NULL PRIMARY KEY DEFAULT nextval('tbl_item_id_seq'),
pair_id integer,
label character varying(50) NOT NULL,
FOREIGN KEY (pair_id) REFERENCES tbl_item (id)
);

ALTER SEQUENCE tbl_item_id_seq OWNED BY tbl_item.id;

Предметы генерируются процедурно. Обычно одновременно создается несколько пар, и конечная цель состоит в том, чтобы вставить все пары одним запросом. Я решил это с помощью PHP, где я вставил строку, вернул ее идентификатор, вставил другую строку с заполненным pair_id и обновил первую строку с идентификатором второй. Это означает, что запрос на 3 дБ начался с PHP, и поскольку генерируется несколько пар, это означает, что number_of_pairs * 3 запроса. Когда у меня есть около 100 пар, это означает 300 запросов и дает хорошие накладные расходы во время обработки, что я хотел бы минимизировать.

Итак, задается вопрос, какой самый быстрый способ вставить пары строк со ссылкой на идентификатор друг друга в одну таблицу в PSQL?

0

Решение

Вы можете зарезервировать несколько идентификаторов:

select nextval('tbl_item_id_seq') from generate_series(1,200)

затем вручную назначьте id / pair_id. Таким образом, вставки могут быть даже одним оператором COPY (если его поддерживает драйвер Postgres).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]