Django - F('') пользовательского Join включает одинарные кавычки в ссылку на столбец, в результате чего Postgres думает, что это строка, а не ссылка на столбец
Я создал пользовательский join, который позволяет набору запросов присоединяться к пользовательской функции Postgres. Параметры этой функции требуют, чтобы внешняя ссылка на общий запрос была передана как часть списка параметров. Когда Django делает это для F(''), он включает одинарные кавычки вокруг двойных кавычек, чтобы postgres считал, что параметр является строкой, а не ссылкой на внешний псевдоним.
Пользовательское присоединение:
Этой функции (join_to_function) даны следующие параметры функции:
function_parameters = [
... set of parameters ...
F('item_id'),
]
Это генерирует следующий SQL
SELECT
... fields to select on ...
FROM "metric_data"
LEFT OUTER JOIN "upwards_link_traversal"(.. other parameters, '"metric_data"."item_id"') traversal
ON (metric_data.item_id = traversal.child_id)
WHERE
... where clause ...
Проблема заключается в том, что Django компилирует F('item_id') в ''generated_metric_data_time_series'. "service_item_id"', что включает одинарные кавычки вокруг имен столбцов. Это приводит к тому, что Postgres выдает ошибку типа, так как столбец, на который он должен ссылаться, является полем int id, а не переданной строкой.
Возникает следующая ошибка:
function upwards_link_traversal(bigint, text, text[], integer) does not exist
текст интерпретируется Postgres вместо ссылки на столбец поля item_id внешних запросов.
Есть ли решение, как удалить кавычки, не делая что-то вроде regex-сопоставления и замены '' на ""?