无法使用laravel 5中的迁移将新列添加到包含太多数据的表中

时间:2017-06-28 16:12:44

标签: php postgresql laravel

我正在尝试向我的"用户"添加新列。在postgres中,我使用Laravel 5.1,新列将是一个默认为" CURRENT_TIMESTAMP"的时间戳,这是我的迁移文件:

public function up(){
    Schema::table('users', function (Blueprint $table) {
        $table->timestamp('last_activity_at')->default(DB::raw('CURRENT_TIMESTAMP'));
    });
}

我的用户桌面有超过20,000条记录

当运行php artisan migrate时,它只会卡住,没有任何反应,服务器响应,postgres响应,但用户的表似乎被锁定,我必须重新启动服务器。

问题发生在两个不同的服务器,dev和prod,prod我被要求确认运行迁移然后它就会卡住

我做了一些测试,我删除了默认值并使用了nullable()

    Schema::table('users', function (Blueprint $table) {
        $table->timestamp('last_activity_at')->nullable();
    });

当迁移运行时,我检查了postgres pg_stat_activity并返回此记录:

datid            | 16384
datname          | apiprod
pid              | 14183
usesysid         | 16386
usename          | apiprod
application_name | 
client_addr      | ::1
client_hostname  | 
client_port      | 49618
backend_start    | 2017-07-04 18:54:19.143425+02
xact_start       | 2017-07-04 18:54:19.165856+02
query_start      | 2017-07-04 18:54:19.165872+02
state_change     | 2017-07-04 18:54:19.165873+02
waiting          | t
state            | active
backend_xid      | 
backend_xmin     | 14765396
query            | alter table "users" add column "last_activity_at" timestamp(0) without time zone null

似乎等着access exclusive锁定,我检查了锁表,但它没有返回任何记录。

1 个答案:

答案 0 :(得分:1)

我认为您的迁移文件遇到内部错误 当我们使用迁移的时候它会卡住

使用此命令:

php artisan migrate:刷新OR php artisan migrate:rollback

不要手动删除该列 然后再次迁移文件