You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
При выполнении функций, в теле которых имеется запрос с группировкой,
получаю ошибку.
ERROR: ORDER/GROUP BY expression not found in targetlist
CONTEXT: SQL statement "SELECT client_guid AS out_client_guid
FROM Receipts
WHERE payment_date BETWEEN in_date_begin AND in_date_end + interval '1 day'
AND total > 0
GROUP BY client_guid
Ошибка возникает не при первом, а, как правило, при 5-6 вызове функции
Если сделать запрос динамическим - ошибка не возникает.
The text was updated successfully, but these errors were encountered:
Ошибка возникает не при первом, а, как правило, при 5-6 вызове функции.
Видимо, это связано с prepared statements. Вы не могли бы сформировать небольшой тест-кейс (схема таблицы + запрос + партицирование) для воспроизведения проблемы? Это значительно ускорит поиск решения.
CREATE TABLE Receipts (
id TEXT NOT NULL,
total BIGINT,
payment_date TIMESTAMP WITHOUT TIME ZONE NOT NULL,
card_number TEXT,
client_guid BIGINT,
shop_number INTEGER,
cash_number INTEGER,
shift_number INTEGER,
receipt_number INTEGER,
CONSTRAINT receipts_pkey PRIMARY KEY(id)
)
WITH (oids = false);
CREATE INDEX receipts_receipts_payment_date_idx ON Receipts
USING btree (payment_date);
CREATE OR REPLACE FUNCTION get_segment_by_date_avg_total (
in_date_begin date,
in_date_end date,
in_avg_min bigint,
in_avg_max bigint
)
RETURNS SETOF bigint AS $body$
BEGIN
RETURN QUERY
SELECT client_guid
FROM Receipts
WHERE payment_date between in_date_begin and in_date_end
GROUP BY client_guid
HAVING sum(total)/count() BETWEEN in_avg_min AND in_avg_max
AND count() > 0;
END; $body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY DEFINER
COST 100 ROWS 1000;
select get_segment_by_date_avg_total('2017-02-01', '2017-02-01', 1, 10000);
null
ещё 5 вызовов
и, наконец,
select get_segment_by_date_avg_total('2017-02-01', '2017-02-01', 1, 10000);
ERROR: ORDER/GROUP BY expression not found in targetlist
CONTEXT: SQL statement "SELECT client_guid
FROM Receipts
WHERE payment_date between in_date_begin and in_date_end
GROUP BY client_guid
HAVING sum(total)/count() BETWEEN in_avg_min AND in_avg_max
AND count() > 0"
PL/pgSQL function get_segment_by_date_avg_total(date,date,bigint,bigint) line 4 at RETURN QUERY
Спасибо, я смог воспроизвести проблему на master. Хорошая новость заключается в том, что эту проблему мы уже решили в текущей dev-ветке. Совсем скоро мы собираемся выпустить релиз 1.4.
Uh oh!
There was an error while loading. Please reload this page.
Здравствуйте!
При выполнении функций, в теле которых имеется запрос с группировкой,
получаю ошибку.
ERROR: ORDER/GROUP BY expression not found in targetlist
CONTEXT: SQL statement "SELECT client_guid AS out_client_guid
FROM Receipts
WHERE payment_date BETWEEN in_date_begin AND in_date_end + interval '1 day'
AND total > 0
GROUP BY client_guid
Ошибка возникает не при первом, а, как правило, при 5-6 вызове функции
Если сделать запрос динамическим - ошибка не возникает.
The text was updated successfully, but these errors were encountered: