2016-09-16 5 views
0

Итак, возникает такая ситуация, когда у вас есть таблица, в которую вы хотите вставлять строки в пары с ссылкой друг на друга. Точно так же, как в двухстороннем учете, каждый элемент имеет противоположность, как пара его. Эта таблица:Самый быстрый запрос для вставки нескольких пар строк с перекрестной ссылкой в ​​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, где я вставлял строку, возвращал ее id, вставлял другую строку с заполнением парой и обновлял первую строку с идентификатором второго. Это означает, что 3 db-запрос запущен с PHP, и поскольку генерируется несколько пар, это означает number_of_pairs * 3 запроса. Когда у меня около 100 пар, это означает 300 запросов и дает хорошие накладные расходы во время обработки, что я хотел бы свести к минимуму.

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

ответ

0

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

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

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

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

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