PostgreSql 不理解列名

问题描述

我已经在 Postgresql 中创建了表:

DROP TABLE IF EXISTS es_events;

CREATE TABLE IF NOT EXISTS es_events (
  id SERIAL,  name VARCHAR (50) NOT NULL,  version INT NOT NULL,  data BYTEA NOT NULL
);

现在我正在尝试从此表中进行选择:

SELECT COALESCE(MAX(version),0)
                            FROM public.es_events
                            WHERE name = 'asd';

但结果我收到:

ERROR:  column "version" does not exist
LINE 1: SELECT COALESCE(MAX(version),0)
                            ^
HINT:  Perhaps you meant to reference the column "es_events.  version".
sql state: 42703
Character: 21

我尝试使用“es_events.version”,但没有帮助:

ERROR:  column "es_events.  version" does not exist
LINE 1: SELECT COALESCE(MAX("es_events.  version"),0)
                            ^
sql state: 42703
Character: 21

我做错了什么?如何从表中选择?

# psql --version
psql (Postgresql) 13.3 (Debian 13.3-1.pgdg100+1)

解决方法

根据您的错误消息,您创建的表的列名为 " version"(有两个前导空格)而不是 version

您可以重命名列:

ALTER TABLE es_events RENAME "  version" to version;
,

create table 中有空格,修复表创建脚本名称后开始正常工作:

CREATE TABLE IF NOT EXISTS es_events (id SERIAL,name VARCHAR (50) NOT NULL,version INT NOT NULL,data BYTEA NOT NULL)