У меня есть приложение, над которым я работаю, и сегодня вечером обнаружилось тревожное различие - и я подумал, что документирую его здесь и посмотрим, сможет ли кто-нибудь его воспроизвести и / или объяснить. Запрос составлен, но демонстрирует проблему:
select
'123' ~ '^\d+$' as result_1,
'123' ~ '^[0-9]+$' as result_2
У меня PostgreSQL v9.1, работающий в Windows 7, и когда я запускаю этот запрос, я получаю:
Т, Т
Однако, когда я запускаю запрос на PostgreSQL v9.0 на Ubuntu 10.04, я получаю:
F, T
Итак, похоже, что PostgreSQL изменил между v9.0 и v9.1 при обработке «\ d» или что-то связано с различиями между библиотеками, установленными между Windows и Ubuntu.
В любом случае, я думаю, что люди должны знать, что ваши ограничения проверки и т. Д. Могут не вести себя одинаково между ними (моя уверена, что нет).
Примечание: к сожалению, у меня нет простого доступа к Windows 7, работающему под управлением 9.0, или я бы тоже там протестировал.
Может кто-нибудь объяснить это? Если это хорошо известно, пожалуйста, прости меня. Я не видел ответа, когда гуглил по нему. Очевидно, что безопаснее всего использовать [0-9], потому что он работает в обоих местах. Но, опять же, я хотел бы знать, почему это происходит.