加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在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中的一个标准类型(在表名称等的目录中使用),还有一些将事物转换为名称类型的标准函数.它实际上并不是保留的,只是存在的对象被称之为加上一些历史奇怪的语法,使事情变得混乱;最近版本由开发人员修复.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读