我正在尝试向我的"用户"添加新列。在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
锁定,我检查了锁表,但它没有返回任何记录。
答案 0 :(得分:1)
我认为您的迁移文件遇到内部错误 当我们使用迁移的时候它会卡住
使用此命令:
php artisan migrate:刷新OR php artisan migrate:rollback
不要手动删除该列 然后再次迁移文件