【问题标题】:How to correctly use doctrine migrations with postressql如何正确使用 postgresql 的学说迁移
【发布时间】:2017-11-20 17:10:04
【问题描述】:

我有一个带有 postgressql 数据库的 symfony 2,8 项目,ID 生成策略是 IDENTITY 但我输入的每个命令都像

doctrine:schema:update

doctrine:migrations:migrate

返回这样的错误:

 An exception occurred while executing 'SELECT min_value, increment_by FROM "abstract_group_id_seq"':  

SQLSTATE[42703]:未定义列:7 错误:列“min_value”不存在
LINE 1: SELECT min_value, increment_by FROM "abstract_group_id_seq"

是模式名称问题吗?有人知道如何正确设置教义吗?谢谢
^

【问题讨论】:

  • 这是一个非常好的问题!
  • 您使用的是什么版本的 Postgres? Doctrine 对 PG10 有一些问题,请参阅this bug report
  • 是的,postgres版本是PG10

标签: php postgresql doctrine symfony-2.8


【解决方案1】:

如果其他人仍然有此问题,请确保您在教义.yaml 中使用正确的 Postgres 驱动程序版本

PostgreSQL DBAL

【讨论】:

  • 感谢您提供的有用提示。为我节省了很多时间。
【解决方案2】:

更改方法_getPortableSequenceDefinition() 位于文件/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/PostgreSqlSchemaManager.php

到这个:

 protected function _getPortableSequenceDefinition($sequence)
    {
        if ($sequence['schemaname'] != 'public') {
            $sequenceName = $sequence['schemaname'] . "." . $sequence['relname'];
        } else {
            $sequenceName = $sequence['relname'];
        }

        $version = floatval($this->_conn->getWrappedConnection()->getServerVersion());

        if ($version >= 10) {$data = $this->_conn->fetchAll('SELECT min_value, increment_by FROM pg_sequences WHERE schemaname = \'public\' AND sequencename = '.$this->_conn->quote($sequenceName));
        }
        else
        {
            $data = $this->_conn->fetchAll('SELECT min_value, increment_by FROM ' . $this->_platform->quoteIdentifier($sequenceName));
        }

        return new Sequence($sequenceName, $data[0]['increment_by'], $data[0]['min_value']);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 2019-12-28
    相关资源
    最近更新 更多