使用Postgresql时,我有一个不理解的明显奇怪的行为
假设有一个简单的表
create table employee (
number int primary key,
surname varchar(20) not null,
name varchar(20) not null);这对我来说是很清楚的
select name from employee但是,我还通过以下命令获得了所有名称
select name(employee) from employee我不明白最后这句话。
我使用的是PostgreSQL 13和pgadmin4
发布于 2021-03-30 04:30:28
我想用PostgreSQL docs中的这句话来扩展@Abelisto的回答
与组合值相关的另一个特殊语法行为是,我们可以使用函数表示法来提取组合值的字段。解释这一点的简单方法是,符号字段(表)和table.field是可以互换的。例如,这些查询是等效的:
..。
函数表示法和字段表示法之间的等价性使得在复合类型上使用函数来实现“计算字段”成为可能。使用上面最后一个查询的应用程序不需要直接知道某些函数不是表的实际列。
发布于 2021-03-30 03:43:23
这只是个假设。
在PostgreSQL中,有两种语法方法可以调用接收行作为参数的函数。例如:
create table t(x int, y int); insert into t values(1, 2);
create function f(a t) returns int language sql as 'select a.x+a.y';
select f(t), t.f from t;
┌───┬───┐
│ f │ f │
├───┼───┤
│ 3 │ 3 │
└───┴───┘它的实现可能也是为了使列的语法相同:
select f(t), t.f, x(t), t.x from t;
┌───┬───┬───┬───┐
│ f │ f │ x │ x │
├───┼───┼───┼───┤
│ 3 │ 3 │ 1 │ 1 │
└───┴───┴───┴───┘https://stackoverflow.com/questions/66860047
复制相似问题