Ответ 1
Чтобы избежать подчеркивания, вам нужно использовать обратную косую черту. Измените пример запроса на следующее:
SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%\_by'
При поиске символов подчеркивания в Postgresql литеральное использование символа _
не работает. Например, если вы хотите найти все свои таблицы для любых столбцов, заканчивающихся в _by
, для чего-то вроде журнала изменений или информации о деятельности, например. updated_by
, reviewed_by
и т.д., почти всегда работает следующий запрос:
SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%_by'
В принципе он полностью игнорирует подчеркивание и возвращается, как если бы вы искали LIKE '%by'
. Это не может быть проблемой во всех случаях, но она может быть одной. Как найти символы подчеркивания?
Чтобы избежать подчеркивания, вам нужно использовать обратную косую черту. Измените пример запроса на следующее:
SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%\_by'
Просто столкнулся с той же проблемой, и единственная обратная косая черта не сработала. Я нашел эту документацию в сообществе 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