当前位置: 首页 > 知识库问答 >
问题:

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

霍襦宗
2023-03-14

我正在尝试向postgres中的“users”表添加一个新列,我使用的是Laravel 5.1,新列将是一个时间戳,默认为“CURRENT_timestamp”,这是我的迁移文件:

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

我的用户表有20000多条记录

当运行php artisan migrate时,它只是卡住了,什么也没发生,服务器响应,postgres响应,但用户的表似乎被锁定,我必须重新启动服务器。

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

我做了更多的测试,删除了默认值并使用了nullable()

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

当迁移运行时,我检查postgrespg_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 exclusivelock,我检查了locks表,但它没有返回任何记录。

共有1个答案

谢选
2023-03-14

我想你的迁移文件遇到了一个内部错误,当我们使用迁移的时候,它卡住了

使用此命令:

php artisan迁移:刷新或php artisan迁移:回滚

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

 类似资料:
  • 我正在使用laravel将列位置添加到用户表中。我创建了一个名为2017\u 05\u 18\u 025207\u添加\u用户名\u字段\u到\u用户\u表的新迁移。。并对其进行了修改,以描述模式以及所有的up()和down()。但是,当我尝试使用PHP artisan migrate进行迁移时。它没有反映在数据库中。 这段代码是我在新迁移中写的。

  • 我已经创建了一个迁移文件,并在数据库中创建了表。现在,我想向现有迁移文件添加新列。我要做的是,打开迁移文件并在up()函数中添加列名,添加列名后,运行命令 如何向现有表中添加新列?

  • Iam正在尝试向现有集合添加列。Iam使用MongoDB Iam运行以下迁移: } 当我执行“php artisan migrate”时,得到的响应很好: 然后,当我去“robomongo 3t studio”验证新专栏是否已创建时,我看不到它 我错过了什么吗。我对mongodb和laravel是新来的,对我来说太赤裸了。

  • 问题内容: 我不知道如何使用Laravel框架向现有数据库表添加新列。 我试图使用…来编辑迁移文件。 在终端中,我执行和。 如何添加新列? 问题答案: 要创建迁移,您可以在Artisan CLI上使用migration:make命令。使用特定名称以避免与现有模型冲突 对于Laravel 3: 对于Laravel 5+: 然后,您需要使用该方法(在访问现有表而不是创建新表时)。您可以添加如下所示的列

  • 然而,我发现手动操作很不方便。有没有办法告诉Room:我不会接触任何现有的表,所以数据是安全的。请为我创建迁移?

  • 我不知道如何使用Laravel框架将新列添加到现有的数据库表中。 我试图使用…编辑迁移文件。。。 在终端,我执行和。 如何添加新列?