массовые / множественные запросы, которые занимают много времени, никогда не заканчиваются в Postgres - PullRequest
1 голос
/ 13 июня 2011

Я создал функцию в postgres, которая вставляет данные в таблицу.Функция получает строку и вводит значение в таблицу после ее обработки.Я хочу, чтобы я мог вызывать функцию несколько раз в pgAdmin вместо того, чтобы запускать их в пакетном режиме.

Пример: в pgAdmin я открываю окно запроса sql и набираю

select customfunction('string1');
select customfunction('string2');
           ^
           .
           .
           .
           .
           v
select customfunction('string100000000');

Когда я пытаюсь запустить это, это работает только тогда, когда я запускаю около 6000 строк (6000 функций).Если я отменяю его во время его работы, он ничего не фиксирует (даже в первой строке).Я должен продолжать разрезать их на партии, чтобы завершить весь запрос.Как я могу добиться этого без запуска их в пакетном режиме.

Я хочу скопировать и вставить весь запрос и ждать, пока все не будет сделано.Прямо сейчас запрос просто выполняется без ответа бесконечно, если я запускаю более 10000 строк в пакете.Есть ли способ, которым postgres может зафиксировать каждую строку после запуска этой строки?

Я также хотел бы знать, может ли кто-нибудь точно определить, какая строка обрабатывается во время выполнения запроса.

Ответы [ 2 ]

2 голосов
/ 14 июня 2011

Есть ли способ, которым postgres может зафиксировать каждую строку после запуска этой строки?

Это не будет сделано, если включена автоматическая фиксация - это тоже значение по умолчанию, так что ... Вы предшествуете вызовам оператором начала? Если это так, перед совершением звонков ...

Кроме того, подумайте о том, чтобы подготовить заявление или сделать то, что предложил Джек.

1 голос
/ 13 июня 2011

Вы пытались пакетировать свои строки в файл, импортировать файл в таблицу (которую я буду называть string_table с одним столбцом, называемым строкой) и пытаться:

select customfunction(string)
from string_table;

ETA: если вы хотитекакой-то индикатор прогресса и нужно запускать один выбор за раз, вы можете использовать DBI на языке сценариев для чтения строк из файла или таблицы, перебирать вызовы функций в цикле, а затем делать простыераспечатка консоли с каждой итерацией.

...