可能是引用本身就是整个问题。我有一个类似的问题,这是由于 CREATE TABLE 语句中列名周围的引号引起的。请注意,没有空格问题,只是引起问题的引号。
该列看起来像被调用anID
但实际上被调用"anID"
。引号不会出现在典型的查询中,因此很难检测到(对于这个 postgres 菜鸟)。这是在 postgres 9.4.1 上
更多细节:
做postgres=# SELECT * FROM test;
给了:
anID | value
------+-------
1 | hello
2 | baz
3 | foo (3 rows)
但试图只选择第一列会SELECT anID FROM test;
导致错误:
ERROR: column "anid" does not exist
LINE 1: SELECT anID FROM test;
^
仅查看列名并没有帮助:
postgres=# \d test;
Table "public.test"
Column | Type | Modifiers
--------+-------------------+-----------
anID | integer | not null
value | character varying |
Indexes:
"PK on ID" PRIMARY KEY, btree ("anID")
但是在 pgAdmin 中,如果您单击列名并查看它填充的 SQL 窗格:
ALTER TABLE test ADD COLUMN "anID" integer;
ALTER TABLE test ALTER COLUMN "anID" SET NOT NULL;
你瞧,列名周围有引号。那么最终postgres=# select "anID" FROM test;
工作正常:
anID
------
1
2
3
(3 rows)
同样的道德,不要使用引号。