2015-08-25 2 views
0

Я кэширую большой ответ JSON по соображениям производительности и обсуждая, использовать ли внешние файлы или текстовый столбец в postgres. Проблема с последним заключается в том, что когда я должен полностью перестроить кеш, SQL для ОБНОВЛЕНИЯ таблицы, таким образом, довольно большой.Обновление большой строки эффективно в postgresql

Я просмотрел функцию КОПИРОВАНИЯ, и я мог удалить старую строку, выписать файл CSV и КОПИРОВАТЬ в строке замены, но мне кажется, что это kludgy.

Существует эффективный способ эффективного обновления текстового столбца с большим количеством текста без запроса анализатора SQL для разбора смехотворно длинного оператора SQL?

Спасибо.

ответ

1

Используйте параметр привязки из драйвера, который поддерживает привязку параметров на стороне сервера («подготовленные операторы»). Значение параметра передается как простой кусок данных с длинным словом на проводе. Это также делает сообщения об ошибках, сообщения журнала и т. Д. Более читаемыми.

PgJDBC делает правильное связывание параметров на стороне сервера, равно как и libpq. Многие драйверы на самом деле выполняют привязку параметров на стороне клиента, поэтому они все еще генерируют большой оператор.

Вы можете определить, выполняет ли драйвер клиентские привязки, запустив подготовленный оператор с включенным log_statement = 'all'. Если оператор выглядит как SELECT $1, он использует привязку на стороне сервера; если он выглядит как SELECT 'some_value', он использует привязку на стороне клиента.

Тем не менее, накладные расходы на разбор строки литерала довольно низки. Я подозреваю, что если вы просто сделаете все, что проще, реальное воздействие на мир будет меньше, чем вы ожидаете. Устраните проблему, если она действительно показывает признаки проблемы.

Обратите внимание, что индивидуальные значения по-прежнему ограничены 1 ГБ.