Можно сделать это с командой наклонной черты psql:
\d myTable describe table
Это также работает на другие объекты:
\d myView describe view
\d myIndex describe index
\d mySequence describe sequence
Источник: faqs.org
Я думаю, вы слишком много делаете с SQL, если все слова находятся в одном поле каждой строки. Я рекомендую выполнять любую обработку / подсчет текста с вашим приложением после того, как вы возьмете текстовые поля из базы данных.
Я бы рекомендовал вообще не делать этого в SQL. Вы загружаете БД чем-то, что у нее не получается. Выбор группы строк и вычисление частоты на стороне приложения будет проще реализовать, будет работать быстрее и будет поддерживаться с меньшим количеством проблем / головной боли.
Я думаю, вам следует делать это как индексацию, с дополнительной таблицей. Всякий раз, когда вы создаете, обновляете или удаляете строку в исходной таблице, вам следует обновить таблицу индексации. В этой индексной таблице должны быть столбцы: слово и количество вхождений.
Вы можете попробовать этот извращенный способ:
SELECT
(LENGTH(field) - LENGTH(REPLACE(field, 'word', ''))) / LENGTH('word') AS `count`
ORDER BY `count` DESC
Этот запрос может быть очень медленным. Кроме того, это выглядит довольно некрасиво.