如何在多列嵌套 JSON 上设置唯一约束
How to set unique constraint on nested JSON with multiple columns
我正在尝试在两列(name
和 a
)之间设置唯一约束,一列为 text
类型,一列为 json
类型。我如何在 Postgres 9.6.3 中构建它?
示例行如下所示:
{ name: 'someName',
a: {
b: {
c: 'some text'
}
}
}
为此创建 table 的 postgres 命令是什么?目前我有这个,它在 (
.
附近给出语法错误
创建 TABLE 操作 (
id bigint 不为空,
名称文本,
一个json,
unique (name, payload::json#>>'{message, payload, content}')
);
我也试过了
CREATE TABLE action (
id bigint NOT NULL,
name text,
a json
);
ALTER TABLE actions ADD CONSTRAINT actions_constraint UNIQUE (payload::json#>>'{b, c, d}', name);
一直给我这个错误:
ERROR: syntax error at or near "::"
如何创建此约束?
如果您查看文档 create table
and table_constraint is:
[CONSTRAINT constraint_name ]
UNIQUE ( column_name [, ... ] ) index_parameters |
UNIQUE
in CREATE TABLE
只接受列名
所以如果你想在一个表达式上建立索引,你必须在 table 创建之后添加它,命令是 CREATE INDEX
(alter table 无法实现)
create unique INDEX actions_constraint on action (((a#>>'{b, c}')::text), name);
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ]
( { column_name | ( expression ) }
我正在尝试在两列(name
和 a
)之间设置唯一约束,一列为 text
类型,一列为 json
类型。我如何在 Postgres 9.6.3 中构建它?
示例行如下所示:
{ name: 'someName',
a: {
b: {
c: 'some text'
}
}
}
为此创建 table 的 postgres 命令是什么?目前我有这个,它在 (
.
创建 TABLE 操作 ( id bigint 不为空, 名称文本, 一个json, unique (name, payload::json#>>'{message, payload, content}') );
我也试过了
CREATE TABLE action (
id bigint NOT NULL,
name text,
a json
);
ALTER TABLE actions ADD CONSTRAINT actions_constraint UNIQUE (payload::json#>>'{b, c, d}', name);
一直给我这个错误:
ERROR: syntax error at or near "::"
如何创建此约束?
如果您查看文档 create table
and table_constraint is:
[CONSTRAINT constraint_name ]
UNIQUE ( column_name [, ... ] ) index_parameters |
UNIQUE
in CREATE TABLE
只接受列名
所以如果你想在一个表达式上建立索引,你必须在 table 创建之后添加它,命令是 CREATE INDEX
(alter table 无法实现)
create unique INDEX actions_constraint on action (((a#>>'{b, c}')::text), name);
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ] ( { column_name | ( expression ) }