Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何返回表的附加列而不必重复返回定义中的所有列名和类型?_Postgresql_Sql Function - Fatal编程技术网

Postgresql 如何返回表的附加列而不必重复返回定义中的所有列名和类型?

Postgresql 如何返回表的附加列而不必重复返回定义中的所有列名和类型?,postgresql,sql-function,Postgresql,Sql Function,我有很多列的表格。我想创建一个函数,返回所有这些列,并附加一列。有没有一种方法可以做到这种类型安全(即不返回记录),而不必重复所有列名和类型 例如: 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 $$ sel

我有很多列的表格。我想创建一个函数,返回所有这些列,并附加一列。有没有一种方法可以做到这种类型安全(即不返回
记录
),而不必重复所有列名和类型

例如:

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
,这很烦人。

我支持你的观点,我不知道有什么好方法可以做到这一点

这就是说,这是一种令人讨厌的方法。它确实将在返回类型中指定单个字段的负担转移到了实际的函数文本中,但在我看来,它确实使整个过程更易于理解

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;

就像我说的,这不是个好办法。这只是一种方法。

IMO使用view可以简化一点(至少它不需要为虚拟表创建物理存储),这是一个聪明的想法。您可以将它们
取消标记
,以防止@Abelisto的评论。