Я написал базовый сценарий, который синхронизирует данные из базы данных PostgreSQL в другую систему, которая выполняет в моей тестовой/среде разработки без проблем, с использованием:Npgsql: Старое плавающая точка представление для временных меток не поддерживается
- PostgreSQL 9.4
- Npgsql длл версия 3.0.3
После того, как мы запустили сценарий в реальной рабочей среде, мы попали в следующее сообщение об ошибке:
"Old floating point representation for timestamps not supported"
Исследуя проблему, я обнаружил, что это связано с «устаревшим вариантом времени компиляции PostgreSQL, который переключается на представление с плавающей запятой некоторых полей даты и времени. Npgsql (в настоящее время) не поддерживает этот режим.»
Here is a link to the relevant source code.
В производстве, сервер PostgreSQL работает версия 8.3, и по внутренним причинам, менеджер сервер отказался обновить сервер PostgreSQL в это время . (Текущая версия Npgsql официально не поддерживает PosgreSQL до версии 9. Doh!)
Вопрос (ы):
- есть ли способ изменить PostgreSQL 8.3 "integer_datetimes" конф iguration без полной переустановки приложения или обновления ?
- Альтернативно, есть ли способ понизить мои DLL-файлы Npgsql до более старой версии, где этот параметр конфигурации был поддержан?
- Какие-либо рекомендации по альтернативе Npgsql, если необходимо? Я думал о реорганизации кода для использования ADO.NET (но я не уверен, что это было бы рекомендовано).
Переход на Npgsql 2.2.7 разрешил ошибку «Старое представление с плавающей запятой для временных меток, не поддерживаемых», с которым я столкнулся. Спасибо за помощь! Я полностью согласен с тем, что использование PosGreSQL 8.3 не является идеальным, но в этом случае, к сожалению, я не имею никакого контроля над решением об обновлении или нет, и мне пришлось найти рабочее решение для базы данных PostgreSQL 8.3. С яркой стороны у меня уже есть копия моего проекта, в которой используется последняя версия Npgsql для обновления базы данных. Еще раз спасибо! –
У меня есть экземпляр PostgreSQL 9.3 Я не управляю с 'integer_datetimes' отключенным. Npgsql 2.2.7 работает для временных меток, но некоторые массивы бросают, я предполагаю, что что-то делать с нулями в массивах типов значений. Обновление до 3.2.5 фиксировало массивы, но теперь отметки времени. Почему была удалена поддержка временной метки (похоже, возможно, совершить «1f140e5»)? – ryachza
поддержка временной метки не была удалена - Npgsql 3.0 переключился с чтения/записи текстового представления значений на двоичный, т. Е. Вместо того, чтобы анализировать человеко-читаемые представления временных меток, вместо этого считывается простое двоичное значение (гораздо эффективнее, проще в обслуживании и т. Д.).). К сожалению, в * очень старых версиях PostgreSQL двоичное представление по умолчанию не поддерживается Npgsql, хотя вы можете перекомпилировать, как описано выше для нового представления. –