Пример данных таблицы:
--------------------------
| key | domain | value |
--------------------------
| a | en | English |
| a | de | Germany |
Запрос, который возвращает нужный мне результат:
select * from
(
select t1.key,
(select value from TABLE where t1.key=key AND code='en') en,
(select value from TABLE where t1.key=key AND code='de') de
from TABLE t1
) as t2
Данные, полученные по запросу:
---------------------------
| key | en | de |
---------------------------
| a | English | Germany |
Я не хочу перечислять все доступные домены с:
(select value from TABLE where t1.key=key AND code='*') *
Можно ли сделать этот запрос более динамичным в Postgres: автоматически добавлять все столбцы домена, существующие в таблице?
Динамическое количество столбцов? Обычный SQL не может этого сделать, но pl / pgSQL может, как говорит @eurotrash.


Для более чем нескольких доменов используйте crosstab(), чтобы сделать запрос короче и быстрее.
Динамический запрос полностью, возвращающий динамическое количество столбцов на основе данных в вашей таблице, невозможен, поскольку SQL строго типизирован. Что бы вы ни пытались, вам понадобится два шага. Шаг 1: сгенерируйте запрос, шаг 2: выполните его.
Или вы возвращаете что-то более гибкое вместо столбцов таблицы, например массив или тип документа, например json. Подробности:
Итак, вы хотите, чтобы все отдельные ненулевые значения домена были в качестве имен столбцов? Вероятно, вам придется использовать динамический sql в plpgsql и выполнять его с помощью EXECUTE.