2015-06-01 6 views
0

У меня есть 2 файла sql и каждый содержит 100 запросов. Мне нужно выполнить первые 10 запросов из первого файла sql, а затем выполнить первые 10 запросов из второго файла sql. После выполнения 10 запросов из второго файла sql, 11-й запрос должен начать выполнение из 1-го sql-файла.Как подсчитать количество запросов, выполняемых в postgres?

Есть ли способ отслеживать, сколько запросов было выполнено? Как приостановить выполнение запроса в 1-м файле и возобновить его после завершения определенного количества запросов?

+0

Просто из любопытства: почему? –

+0

Если каждый запрос находится в отдельной строке, вы можете использовать shell, чтобы возглавить n строк из одного файла, выполнить их, возглавить m строк из второго файла, выполнить их и т. Д.? Здесь мы не останавливаемся, мы просто переключаемся между файлами. – Jayadevan

ответ

0

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

Вы хотите написать простой скрипт Perl или Python, используя DBD::Pg (Perl) или psycopg2 (Python), который читает входные файлы и отправляет запросы.

Разделение ввода требует разбора SQL, что требует некоторой осторожности. Вы не можете просто разделить на запросы на точки с запятой. Вы должны обрабатывать котировки "identifier" и 'literal' с, а также E'escape literals' и $dollar$ quoting $dollar$. Вы можете найти существующий код, чтобы помочь вам в этом, или использовать функциональность из драйвера клиента базы данных, чтобы сделать это.

В качестве альтернативы, если вы можете изменить входные файлы для вставки в них записей, их можно запустить с помощью нескольких экземпляров psql и использовать блокировку в качестве блокировки, чтобы заставить их ждать друг друга в установленных точках. Подробнее см. explicit locking.