将 AutoIncrement 设置为 false 的原始查询?

Raw query to set AutoIncrement to false?

student table 中的 id 列是自动递增的 one.I 想要将其变为非自动递增。我可以知道,我如何修改下面的查询才能正常工作?

 DB::statement("ALTER TABLE student SET AUTO_INCREMENT=FALSE;");

以上代码显示以下错误。

Illuminate\Database\QueryException

  SQLSTATE[42601]: Syntax error: 7 ERROR:  syntax error at or near "AUTO_INCREMENT"
LINE 1: ALTER TABLE student SET AUTO_INCREMENT=FALSE;
                                ^ (SQL: ALTER TABLE student SET AUTO_INCREMENT=FALSE;)

PostgreSQL 中的正确语法是:

ALTER TABLE student ALTER COLUMN id DROP DEFAULT;

其中 id 是序列号列。

您可能还想删除 not null 约束:

ALTER TABLE student ALTER COLUMN id DROP NOT NULL;

这是一个例子,说明为什么发布 table 定义 (ddl) 和 Postgres 版本很重要。如果 Postgres 版本早于版本 10,或者版本 10 或更高版本并且仍定义为 serial/bigserial,@Zakaria 是正确的。但是,版本 10 及更高版本的首选定义是 generated always as identity。如果定义为身份你需要:

alter table student alter column id drop identity.

我不会删除 not null 约束条件,如果它是 PK,则没有实际意义,因为它会自动不为空。