在PostgreSQL中名为特殊关键字?

前端之家收集整理的这篇文章主要介绍了在PostgreSQL中名为特殊关键字?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用的是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中的一个标准类型(在表名称等的目录中使用),还有一些将事物转换为名称类型的标准函数.它实际上并不是保留的,只是存在的对象被称之为加上一些历史奇怪的语法,使事情变得混乱;最近版本由开发人员修复.

猜你在找的Postgre SQL相关文章