可以在PostgreSQL中为json属性分配外键吗?下面是我想要实现的一个例子,但它不起作用:

CREATE TABLE Users (Id int NOT NULL PRIMARY KEY);

CREATE TABLE Data (
    Id int NOT NULL PRIMARY KEY,
    JsonData json NOT NULL, -- [{Id: 1, somedata: null},{Id: 2, somedata: null}, ...]
    CONSTRAINT FK_Users_Data FOREIGN KEY (JsonData->Id) REFERENCES Users(Id) -- this constraint will fail
);

推荐答案

为json属性分配外键是不可能的,也可能永远不可能.这将是PostgreSQL外键执行的一个重大且相当复杂的变化.我不认为这是不可能的,但会面临与外键数组补丁类似的问题.

在9.4版本中,可以将整个json对象作为外键,因为jsonb支持平等测试.在9.3中,你甚至不能这么做.

Postgresql相关问答推荐

利用PostgreSQL查询中表的顺序来计算包含每次时间的时间范围

我无法让pg_cron扩展在最新的Postgres 16图像中工作

将列类型从文本[]更改为jsonb[]

在Postgres中,如何删除包含N个自然数的表,并替换为生成子查询?

我可以将jsonb_set与来自SELECT语句的新值(第三个参数)一起使用吗?

从 Postgres 字段中的多个值中进行 Select

UPDATE implies move across partitions

Heroku PGError:operator does not exist: character varying = integer

Postgres 图像未创建数据库

brew 程序更新恼人的错误信息

SQLAlchemy、Psycopg2 和 Postgresql 复制

什么是 postgres 超级用户

并发刷新materialized视图

Postgres 在 WHERE id != int 查询中排除 NULL

我怎样才能知道 Postgresql 表空间中有什么?

如何在 postgresql 交叉表中用零替换空值

将数据推送到 Heroku 时出错:time zone displacement out of range

在 postgresql 中获取上个月的数据

Postgres DB 上的整数超出范围

Ruby 中 DateTime 的毫秒分辨率