无法在只读事务中执行INSERT - Laravel读/写

时间:2014-06-30 22:23:24

标签: postgresql laravel-4

我正在尝试在Laravel 4.2.6中设置读/写连接,但我无法执行INSERT,但我可以执行UPDATE和DELETE事务。我得到的信息是:

SQLSTATE[25006]: Read only sql transaction: 7 ERROR:  cannot execute INSERT in a read-only transaction

数据库的配置是:

'connections' => [
    'pgsql' => [
        'read'     => [
            'host' => '192.168.22.10'
        ],
        'write'     => [
            'host' => '192.168.33.10'
        ],
        'driver'   => 'pgsql',
        'database' => 'simpo',
        'username' => 'postgres',
        'password' => 'xxx',
        'charset'  => 'utf8',
        'prefix'   => '',
        'schema'   => 'public',
    ],
]

我正在使用Postgres 9.3和2台服务器(虚拟机)。复制工作正常,是一个简单的二进制或“热备”复制(主/从)复制,其中备用机器只能进行读操作。


编辑:

我使用查询构建器测试并且INSERT工作正常,但Eloquent失败。

我认为可能是在Eloquent模型中有连接的BUG,但不寻常的是,唯一的INSERT操作失败而不是UPDATE或DELETE,所以这让我觉得这是一些只在发生时才会发生的操作执行INSERT(可能使用生成的ID?)

编辑2:

我终于注意到了这个问题。当Laravel尝试插入并获取行的Id时,会发生错误。问题发生的原因是框架调用了'select'方法但是这个选择执行和“INSERT ...返回'ID'”,所以如果机器只能执行SELECT事务失败,因为这个SELECT带有INSERT。

我发出一个pull请求,我检查select方法是否以'insert'操作开始,并根据它获取正确的连接 https://github.com/laravel/framework/pull/4914

1 个答案:

答案 0 :(得分:0)

最终修复了Bug,我认为自版本4.2.9以来不应该出现问题。检查拉取请求的相同link