别名函数时,我看不到复合类型

时间:2017-05-30 09:02:41

标签: postgresql

我创建了表gs

foo=>create table gs as select generate_subscripts('{{1,2,3},{4,5,6}}'::integer[],2);

我将表和列别名:

foo=> select s.a from gs s(a);
 a
---
 1
 2
 3
(3 rows)

如果我只对表进行别名,我会看到复合类型:

foo=> select s from gs s;
  s
-----
 (1)
 (2)
 (3)
(3 rows)

但是当我只将一个函数别名为一个表时,我看不到复合类型,但就好像我给表和列别名:

foo=>  select s from generate_subscripts('{{1,2,3},{4,5,6}}'::integer[],2) s;
 s 
---
 1
 2
 3
(3 rows)

我不明白为什么我没有看到复合类型。

1 个答案:

答案 0 :(得分:0)

设置返回函数(或表函数,SRF)的处理方式与实际关系(表,视图等)不同。 Especially, when they return only one column基本类型):

  

如果未指定var textView = FindViewById<TextView>(Resource.Id.my_label); var span = new SpannableString("My Label"); span.SetSpan(new ForegroundColorSpan(Color.Red), 0, 2, 0); // "My" is red span.SetSpan(new ForegroundColorSpan(Color.Blue), 3, 8, 0); // "Label" is blue textView.SetText(span, TextView.BufferType.Spannable); ,则函数名称将用作表名;在table_alias构造的情况下,使用第一个函数的名称。

     

如果未提供列别名,则对于返回基本数据类型的函数,列名称也与函数名称相同。对于返回复合类型的函数,结果列将获取该类型的各个属性的名称。

但是,当您提供表别名但不提供列别名(对于单柱SRF)时,会出现这种情况。在这种情况下,列别名将与表别名相同,因此您无法显式访问函数的行类型(复合类型)(其引用被列别名隐藏)。 / p>

ROWS FROM()

然而,更有趣的是,当您使用显式表别名单列圆柱形别名的显式列别名时,表别名也会成为列别名(其类型将是基础类型,而不是行类型 - 复合类型。)

select s from generate_subscripts('{{1,2,3},{4,5,6}}'::integer[],2) s;
-- "s" is both a column alias and a table alias here, so:
select s.s from generate_subscripts('{{1,2,3},{4,5,6}}'::integer[],2) s;
-- is also valid

我不确定它是否是一个错误,或者只是一个没有记录的&#34;功能&#34;。

http://rextester.com/VJOBI47962