我创建了表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)
我不明白为什么我没有看到复合类型。
答案 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;。