PostgreSQL 9.2.24报NOT语法错误,同代码在PG10正常,求排查
问题根源与解决方案
嘿,这个问题我遇过,根源很明确——你用的PostgreSQL 9.2.24不支持CREATE INDEX IF NOT EXISTS语法,而这个特性是在PostgreSQL 9.5版本才正式引入的。你的Ubuntu主机用的是PostgreSQL 10,自然支持这个语法,所以代码能正常运行。
从报错信息也能精准定位:
terminate called after throwing an instance of 'pqxx::syntax_error' what(): ERROR: syntax error at or near "NOT" LINE 1: ...olver_fit_length BIGINT NOT NULL);CREATE INDEX IF NOT EXISTS... ^
错误点正好卡在CREATE INDEX IF NOT EXISTS的NOT位置,完全对应版本不兼容的问题。
给你两个可行的解决方案:
方案一:修改SQL语句适配9.2版本
把CREATE INDEX IF NOT EXISTS替换成PostgreSQL 9.2支持的“先检查再创建”逻辑,用PL/pgSQL的DO块实现:
DO $$ BEGIN -- 替换成你的索引名和表名 IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'your_index_name' AND tablename = 'your_table_name') THEN -- 替换成你的创建索引语句 CREATE INDEX your_index_name ON your_table_name (target_column); END IF; END $$;
这个逻辑会先查询系统表pg_indexes判断目标索引是否存在,不存在才执行创建操作,和IF NOT EXISTS的效果完全一致。
方案二:升级PostgreSQL版本(推荐)
如果你的业务场景允许,直接把Docker容器里的PostgreSQL升级到9.5及以上版本(比如和主机一致的10版本),这样就不需要修改任何代码,直接兼容原有SQL语句。
内容的提问来源于stack exchange,提问作者juzzlin
相关产品推荐
相关产品推荐

