У меня есть огромная таблица с 25 миллионами записей и система, в которой есть запланированная задача, которая может выполнить запрос. Запрос должен быстро выбрать последние записи по столбцу создания даты (отметка времени) и применить некоторые вычисления. Проблема заключается в том, что дата также хранится в таблице и при каждом выполнении обновляется до самой последней даты выполнения. Это работает, но очень медленно:
select * from request_history
where createdate > (select startdate from request_history_config)
limit 10;
требуется около 20 секунд, что слишком медленно по сравнению с этим:
set custom.startDate = '2019-06-13T18:02:04';
select * from request_history
where createdate > current_setting('custom.startDate')::timestamp
limit 10;
, и этот запрос завершается в течение 100 миллисекунд. Проблема в том, что я не могу обновить и сохранить дату для следующего выполнения! Я искал оператор SET
variable TO
, который позволил бы мне получить какое-либо значение из таблицы, но все эти попытки не работают:
select set_config('custom.startDate', startDate, false) from request_history_config;
// ERROR: function set_config(unknown, timestamp without time zone, boolean) does not exist
set custom.startDate to (select startDate from request_history_config);
// ERROR: syntax error at or near "("