如何在投影中区分PostgreSQL列引用和表引用?

3
假设我有这样的架构:
create table x (t1 int, t2 int);
create table t1 (t1 int, t2 int);
insert into x values (1, 2);
insert into t1 values (1, 2);

现在在PostgreSQL中,我可以方便地通过投影表引用来创建结果中的嵌套行:

select x from x;

生产:

|x     |
|------|
|[1, 2]|

但是,如果表格和列之间存在冲突,则这种方法无法起作用:
select t1 from t1;

这只是一个不合格的列引用。
|t1 |
|---|
|1  |

现在,我正在维护一个SQL生成器,假设我不能为表设置别名(因为我可能不知道它包含什么列名,而任何别名仍然可能与实际列冲突)。

是否有任何语法可用于消除表引用和列引用之间的歧义,例如下面的假设语法?

select t1::the_table_not_the_column from t1
2个回答

3

如果我知道列的名称,这似乎是有效的:

select row(t1, t2)::t1 as t1 from t1

或者,如果我不知道列名:

select row(t1.*)::t1 as t1 from t1

1

我建议在这些情况下简单地使用表别名:

SELECT t FROM x AS t

完成。

你读过我问题的细则了吗?“既然我正在维护一个SQL生成器,那么就假设我不能为表设置别名”。 - Lukas Eder
我还没有,Lukas。抱歉。 - Torsten Grust
没关系。对于其他人来说,这种方法可能仍然有用,因为很少有情况是完全行不通的... - Lukas Eder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接