Как избежать подчеркивания в Postgresql

При поиске символов подчеркивания в Postgresql литеральное использование символа _ не работает. Например, если вы хотите найти все свои таблицы для любых столбцов, заканчивающихся в _by, для чего-то вроде журнала изменений или информации о деятельности, например. updated_by, reviewed_by и т.д., почти всегда работает следующий запрос:

SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%_by'

В принципе он полностью игнорирует подчеркивание и возвращается, как если бы вы искали LIKE '%by'. Это не может быть проблемой во всех случаях, но она может быть одной. Как найти символы подчеркивания?

Ответ 1

Чтобы избежать подчеркивания, вам нужно использовать обратную косую черту. Измените пример запроса на следующее:

SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%\_by'

Ответ 2

Просто столкнулся с той же проблемой, и единственная обратная косая черта не сработала. Я нашел эту документацию в сообществе PostgreSQL, и она сработала:

Правильный способ - избежать подчеркивания с помощью обратной косой черты. Вы на самом деле нужно написать две обратные косые черты в вашем запросе:

выбрать из foo, где bar как '%\\_ baz'

Первая обратная косая черта заключает в кавычки вторую для анализатора запросов, поэтому то, что заканчивается внутри системы, это%\_ baz, а затем как Функция знает, что с этим делать.

Поэтому используйте что-то вроде этого:

SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%\\_by'

Исходная документация: https://www.postgresql.org/message-id/10965.962991238%40sss.pgh.pa.us