У меня проблема при выполнении INSERT в таблице.
Структура таблицы:
uri (varchar 10000) PK
id_language (varchar 10) PK
id_category (int4) PK
id_data (varchar 50) PK
id_ordinal (int4) PK (this field have a trigger to auto increment)
n_text (text)
Когда я запускаю эту функцию для выполнения 900000 ВСТАВКИ, она работает хорошо и быстро:
CREATE OR REPLACE FUNCTION doInserts() RETURNS integer AS
$BODY$
DECLARE
i integer;
BEGIN
i := 1;
while i <= 900000 loop
insert into tdir_uris_text (uri, id_language, id_category, id_data, n_text) values ('http://localhos/teste' || i, 'PORT', '2', 'pagetitle', 'Pagina teste ' || i);
i := i + 1;
end loop;
RETURN i;
END
$BODY$
LANGUAGE 'plpgsql' ;
Но когда я делаю это с 100000 INSERT, это, кажется, никогда не заканчивается
Операция INSERT, сейчас она работает в 5 часов ...
CREATE OR REPLACE FUNCTION doInserts() RETURNS integer AS
$BODY$
DECLARE
i integer;
BEGIN
i := 1;
while i <= 100000 loop
insert into tdir_uris_text (uri, id_language, id_category, id_data, n_text) values ('http://localhos/teste' || i, 'PORT', '2', 'pagetitle', 'Pagina teste ' || i);
insert into tdir_uris_text (uri, id_language, id_category, id_data, n_text) values ('http://localhos/teste' || i, 'PORT', '2', 'country_ad', 'italy');
insert into tdir_uris_text (uri, id_language, id_category, id_data, n_text) values ('http://localhos/teste' || i, 'PORT', '2', 'services_available', 'service 1');
insert into tdir_uris_text (uri, id_language, id_category, id_data, n_text) values ('http://localhos/teste' || i, 'PORT', '2', 'services_available', 'service 2');
i := i + 1;
end loop;
RETURN i;
END
$BODY$
LANGUAGE 'plpgsql' ;
В чем здесь проблема? Есть какие-нибудь подсказки? Может быть проблема с ключами?
Еще одна информация. После того, как я вставил 900000 регистров, я использовал «DELETE FROM» для удаления регистров, затем я запустил функцию, которая вставляет только 100000 регистров
С наилучшими пожеланиями,