当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL列'foo'不存在

郭凡
2023-03-14

我有一个表,它有20个整数列和一个名为“foo”的文本列

如果我运行查询:

SELECT * from table_name where foo is NULL

我得到一个错误:

ERROR:  column "foo" does not exist

我已经核实过他的专栏确实存在。如果我这样做:

SELECT * from table_name where count is NULL

结果输出将“foo”显示为一列。。。。我猜我必须在查询中做一些特殊的事情,因为foo是一个文本列。。。

感谢您的帮助(POSTGRESQL 8.3)

共有3个答案

勾海超
2023-03-14

PostreSQL显然会在sql查询中将列名转换为小写形式——我见过混合大小写的列名会出现这种错误的问题。可以通过将列名放在引号中来修复它:

SELECT * FROM table_name where "Foo" IS NULL
尚鸿才
2023-03-14

如果出于某种原因创建了大小写混合的列名或大写列名,则需要将其引用,或出现以下错误:

test=> create table moo("FOO" int);
CREATE TABLE
test=> select * from moo;
 FOO 
-----
(0 rows)
test=> select "foo" from moo;
ERROR:  column "foo" does not exist
LINE 1: select "foo" from moo;
               ^
test=> _

请注意错误消息是如何用引号表示的。

江子石
2023-03-14

您不小心创建了带有尾随空格的列名,大概phpPGadmin创建了带有双引号的列名:

create table your_table (
    "foo " -- ...
)

这会给你一个列,看起来它在任何地方都被称为foo,但你必须对它进行双引号引用,并在使用它时包含空格:

select ... from your_table where "foo " is not null

最好的做法是在PostgreSQL中使用小写的无引号列名。phpPGadmin中应该有一个设置,告诉它不要引用标识符(比如表名和列名),但唉,我不使用phpPGadmin,所以我不知道该设置在哪里(或者即使它存在)。

 类似资料:
  • 我正在运行一个简单的select查询: 并得到以下错误: 错误:列return_part_i.cntrctrmntnind不存在第1行:从return_part_i.cntrctrmntnind中选择return_part_i.cntrctrmntnind…^提示:也许你想引用“return_part_i.cntrctrmntnind”一栏。SQL状态:42703字符:8 我尝试了使用和不使用表标

  • 我正在编写一个应用程序来自动构建和运行SQL查询。对于许多表,我的代码工作正常,但在某个表上,它会抛出以下异常: 已运行的查询如下所示: 这实际上是从列中返回非空值。 我不明白为什么在pgAdmin 4中出现“列不存在”错误。我可以看到有一个名为的模式,其中包含表,该表有一个名为的列。 既然所有的列、模式和表名都是由应用程序本身检索的,我不认为存在拼写或语义错误,那么为什么PostgreSQL会导

  • 我在使用SQLAlchemy进行postgresql查询时遇到问题。 我用这行代码创建了一些大表: 它工作得很好。现在,当我想查询数据时,我的第一个问题是我必须为每个表和列名称使用引号,我真的不知道为什么,也许有人可以帮我。 但这不是我的主要问题。我的主要问题是,在查询数据时,所有数值条件都可以正常工作,但列数据中带有字符串的条件除外。我得到一个错误,该列不存在。即时通讯使用: 我认为用“abc”

  • 问题内容: 我一直在拔头发。我有一个非常简单的postgre数据库,一个特定的表有一个名为lName(大写N)的列。现在我知道使用postgre我必须引用lName,因为它包含一个大写的N。 我正在尝试使用以下语句查询数据库: 但我收到此错误: 警告:pg_query()[function.pg-query]:查询失败:错误:..中不存在列“ Smith”。 这是什么问题?为什么说该列为“史密斯”

  • 问题很简单。如何将列添加到表中,但仅当列不存在时?我在这里只找到了如何检查列是否存在的解决方案。

  • 问题内容: 问题很简单。如何将列添加x到表中y,但仅当x列不存在时才添加?我在这里只找到解决方案,如何检查列是否存在。 问题答案: 是使用“ DO”语句的简短版本: 您不能将它们作为参数传递,您需要在客户端的字符串中进行变量替换,但这是一个自包含的查询,如果该列已经存在,则仅发出一条消息,如果不存在则添加一条消息,并且会因其他错误(例如无效的数据类型)而继续失败。 如果这些方法是来自外部来源的随机