在PostgreSQL中名为特殊关键字?
发布时间:2020-12-13 16:27:29 所属栏目:百科 来源:网络整理
导读:我使用的是Ubuntu和PostgreSql 8.4.9. 现在,对于我的数据库中的任何表,如果我从table_name中选择table_name.name,它会显示每行的连接列的结果,尽管表中没有任何名称列.对于具有名称列的表,没有问题.任何想法为什么? 我的结果是这样的: select taggings.nam
我使用的是Ubuntu和PostgreSql 8.4.9.
现在,对于我的数据库中的任何表,如果我从table_name中选择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,"2010-03-18 00:37:55") (3,6,"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;
这是一个已知的混乱的“特征”,有一点点历史.具体来说,您可以使用表名称将表中的元组作为整体引用,然后附加.name将调用它们的名称函数(即将从t中解释为select name(t)).
在PostgreSQL 9开发的某个时刻,Istr已经清理了一下.您仍然可以从t显式选择t来获取行元组的效果,但是您不能以相同的方式应用函数.所以在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; 产生奇怪的: name --------- (1,foo) (1 row) 但在9.1.1产生: ERROR: column t.name does not exist LINE 1: select t.name from t; ^ 正如你所料. 所以,要具体回答你的问题:名称是PostgreSQL中的一个标准类型(在表名称等的目录中使用),还有一些将事物转换为名称类型的标准函数.它实际上并不是保留的,只是存在的对象被称之为加上一些历史奇怪的语法,使事情变得混乱;最近版本由开发人员修复. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |