Я наткнулся на ту же проблему, и я рад добавить еще один ответ на вопрос:
В PostgreSQL 9.2 в документации неожиданно появилось еще одно предложение, охватывающее функцию xpath:
Если выражение XPath возвращает скалярное значение, а не набор узлов,
возвращается одноэлементный массив.
Как раз то, что мне нужно! Таким образом, в отношении вопроса другой правильный ответ: Обновление до PostgreSQL 9.2. На момент написания этой статьи версия 9.2 является только бета-версией, но я могу подтвердить, что она работает:
Информация о версии
postgres=# select version();
version
------------------------------------------------------------------------------------------------------------------
PostgreSQL 9.2beta1 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52), 64-bit
(1 row)
Демонстрация решения
(эта демонстрация была сделана с Postgre 9.5, потому что изначально я вставил неправильный код)
postgres=# SELECT xpath('sum(/my:a/value[.>15])', '<my:a xmlns:my="http://example.com">
postgres'# <value>20</value>
postgres'# <value>10</value>
postgres'# <value>30</value>
postgres'# </my:a>',
postgres(# ARRAY[ARRAY['my', 'http://example.com']]);
xpath
-------
{50}
(1 row)