Как я могу вернуть дополнительный столбец таблицы без необходимости повторять все имена и типы столбцов в определении возврата? - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть таблица с большим количеством столбцов.Я хочу создать функцию, которая возвращает все эти столбцы, с дополнительным столбцом.Есть ли способ сделать этот тип-безопасный (то есть, не возвращая record) без необходимости повторять все имена и типы столбцов?

Например:

create table t
(
    t1 int,
    t2 int,
    t3 text,
    t4 boolean
);

create function extra_t() returns table(t1 int, t2 int, t3 text, t4 boolean, extra text) as
$$
    select t.*, 'example'::text from t;
$$ language sql

Этодовольно досадно, что мне приходится повторять t1 int, t2 int, t3 text, t4 boolean в определении функции.

1 Ответ

0 голосов
/ 21 сентября 2018

Я с вами в вашей борьбе, и я не знаю хорошего способа сделать это.

Тем не менее, это хакерский способ сделать это.Это смещает бремя указания отдельных полей в типе возвращаемого значения на фактический функциональный текст, но, на мой взгляд, делает все это более понятным.

create table t2 (
  extra_text text
) inherits (t);

create or replace function extra_t() returns setof t2 as
$$
    select t.*, 'example'::text from t;
$$ language sql;

Как я уже сказал, это не такхороший способ.Это просто способ.

...