Посмотрите на определение encode
:
\df encode
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+--------+------------------+---------------------+------
pg_catalog | encode | text | bytea, text | func
(1 row)
Первый аргумент должен быть bytea
, то есть двоичная байтовая строка.
Ваши первые два запроса работают, потому что строковые литералы имеют тип unknown
, который может быть приведен к bytea
неявно.
В запросах, которые не работают, вы используете функции md5
и concat
, которые оба имеют text
в качестве типа результата. Теперь не существует неявного преобразования между text
и bytea
, отсюда и сообщение об ошибке.
Чтобы это работало, вы должны ввести явное приведение типа:
select encode(CAST(md5('111') AS bytea), 'base64');