You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony3.4+PostGIS:升级PostgreSQL后Doctrine创建Schema报错

解决PostgreSQL 10 + PostGIS 2.4下Doctrine创建Schema时「min_value不存在」的错误

嘿,这个问题我太熟悉了——之前帮好几个开发者排查过类似的PostgreSQL升级后Doctrine报错的情况。咱们先搞清楚根因:

核心问题出在PostgreSQL 10对序列存储结构的重大变更:在9.6及更早版本里,序列是带min_value、increment_by这些字段的独立表;但从10开始,这些元数据被移到了系统表pg_sequence里,原来的序列表不再直接包含这些列。而你用的Doctrine版本(大概率是DBAL 2.7以下的旧版本)还在沿用老的查询逻辑,直接从序列表读这些字段,自然就触发了Undefined column: 7 ERROR: column "min_value" does not exist的错误。

下面给你几个可行的解决方案,按推荐程度排序:

最省心的方案:升级Doctrine DBAL

Doctrine DBAL从2.7.0版本开始就完全适配了PostgreSQL 10的序列结构,升级后直接解决问题:

  • 如果用Composer管理依赖,直接跑这条命令:
    composer require doctrine/dbal:^2.7
    
  • 升级完成后,清一下Doctrine的缓存,再重新执行Schema创建命令,错误应该就消失了。

临时救急方案(不想升级Doctrine的情况)

要是暂时没法升级依赖,可以手动修改Doctrine的PostgreSQL驱动来适配新的查询逻辑:

  1. 找到PostgreSQLPlatform.php文件(一般在vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/目录下)
  2. 定位到获取序列信息的方法(比如getSequenceMetadataSQL),把原来的查询语句:
    SELECT min_value, increment_by FROM "meas_id_seq"
    
    替换成PostgreSQL 10兼容的写法:
    SELECT s.min_value, s.increment_by FROM pg_sequence s JOIN pg_class c ON s.seqrelid = c.oid WHERE c.relname = 'meas_id_seq'
    
  3. 保存修改后清除Doctrine的缓存,再试一次Schema命令。

额外提醒

  • 升级PostgreSQL和PostGIS后,别忘了执行ALTER EXTENSION postgis UPDATE;,确保PostGIS扩展也完成升级,避免其他潜在的兼容问题。
  • 如果你的项目用了Doctrine ORM,建议同步升级ORM到2.6及以上版本,和DBAL版本保持兼容,避免出现其他奇怪的问题。

内容的提问来源于stack exchange,提问作者Salim Ben Aissa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:31:58