如果使用postgres 14 /mysql 8服务器,我可以基于json字段定义唯一索引吗?
下一次迁移:
Schema::create('quiz_categories', function (Blueprint $table) {
$table->id();
$table->json('name')->comment('This column is used for i18n support');
$table->boolean('active')->default(false);
$table->timestamps();
$table->unique(['name', 'active'], 'quiz_categories_name_active_index');
});
字符串
我得到错误:
Illuminate\Database\QueryException
SQLSTATE[42704]: Undefined object: 7 ERROR: data type json has no default operator class for access method "btree"
HINT: You must specify an operator class for the index or define a default operator class for the data type. (Connection: pgsql, SQL: alter table "quiz_categories" add constraint "quiz_categories_name_active_index" unique ("name", "active"))
型
?
1条答案
按热度按时间wqlqzqxt1#
你可以在PostgreSQL中对JSON字段建立一个唯一的索引,但是需要一些额外的步骤。PostgreSQL没有为JSON数据类型的“btree”访问方法提供默认的操作符类。但是jsonb为“btree”访问函数提供了一个默认的操作符类,所以你可以用它来代替json,在JSON字段上创建一个唯一的索引。这是如何改变你的迁移来使用jsonb。
字符串
希望能成功:)