此上下文错误中不允许使用 DEFAULT

joe*_*k16 1 sql postgresql reserved-words identifier partial-index

我尝试向数据库添加索引,但不断收到错误:

PG::SyntaxError: ERROR: DEFAULT is not allowed in this context

阅读了几个小时的文档后,我似乎无法解决该问题。

我正在运行这个:

"CREATE UNIQUE INDEX index_uniq_service_models_default ON service_models(zone_id) WHERE default"
Run Code Online (Sandbox Code Playgroud)

我的桌子看起来像这样:

create_table :service_models do |t|
  t.string :name, null: false
  t.jsonb :configuration, null: false, default: "{}"
  t.boolean :default, null: false
  t.json :metadata, null: false, default: "{}"
  t.references :zone, foreign_key: true, null: false, index: { name: idx_name(:service_models, :zones) }

  t.timestamps
end
Run Code Online (Sandbox Code Playgroud)

我想要做的是让 ServiceModel 对于一个区域只有 1 个默认值。

一个区域可以有多个 ServiceModel,但只能有 1 个默认 ServiceModel。

Erw*_*ter 5

"default"要创建仅包含列为的行的部分索引true

CREATE UNIQUE INDEX index_uniq_service_models_default ON service_models(zone_id)
WHERE "default";
Run Code Online (Sandbox Code Playgroud)

default是保留字,用作标识符时必须用双引号引起来。

更好的是,一开始就不要使用保留字作为标识符。