我正在使用Ubuntu和PostgreSql 8.4.9.
现在,对于我的数据库中的任何表,如果我这样做select table_name.name from table_name
,它会显示每行的连续列的结果,尽管name
表中没有任何列.对于具有名称列的表,没有问题.知道为什么吗?
我的结果是这样的:
select taggings.name from taggings limit 3;
---------------------------------------------------------------
(1,4,84,,,PlantCategory,soil_pref_tags,"2010-03-18 00:37:55")
(2,5,84,,,PlantCategory,soil_pref_tags,"2010-03-18 00:37:55")
(3,6,84,,,PlantCategory,soil_pref_tags,"2010-03-18 00:37:55")
(3 rows)
select name from taggings limit 3;
ERROR: column "name" does not exist
LINE 1: select name from taggings limit 3;
Run Code Online (Sandbox Code Playgroud)
ara*_*nid 21
这是一个众所周知的令人困惑的"特征",有一点历史.具体来说,您可以使用表名从表中引用元组作为一个整体,然后追加.name
将调用name
它们上的函数(即它将被解释为select name(t) from t
).
在PostgreSQL 9开发的某些时候,Istr这个被清理了一下.您仍然可以select t from t
显式地获取row-as-tuples效果,但是您不能以相同的方式应用函数.所以在PostgreSQL 8.4.9上,这个:
create table t(id serial primary key, value text not null);
insert into t(value) values('foo');
select t.name from t;
Run Code Online (Sandbox Code Playgroud)
产生奇怪的:
name
---------
(1,foo)
(1 row)
Run Code Online (Sandbox Code Playgroud)
但在9.1.1产生:
ERROR: column t.name does not exist
LINE 1: select t.name from t;
^
Run Code Online (Sandbox Code Playgroud)
正如你所料.
所以,要专门回答你的问题:name
是PostgreSQL中的标准类型(在目录中用于表名等),还有一些将事物转换为name
类型的标准函数.它实际上并没有被保留,只是存在的对象被称为,加上一些历史奇怪的语法,让事情变得混乱; 这已由最近版本的开发人员修复.
归档时间: |
|
查看次数: |
4671 次 |
最近记录: |